In [ ]:
import numpy as np
import pandas as pd
from packaging import version
import time
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.metrics import accuracy_score
from sklearn.metrics import mean_squared_error as MSE
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import seaborn as sns
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import models, layers
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPool2D, BatchNormalization, Dropout, Flatten, Dense
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
from tensorflow.keras.preprocessing import image
from tensorflow.keras.utils import to_categorical
import tensorflow.keras.backend as k
%matplotlib inline
np.set_printoptions(precision=3, suppress=True)
print("This notebook requires TensorFlow 2.0 or above")
print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >=2
print("Keras version: ", keras.__version__)
This notebook requires TensorFlow 2.0 or above TensorFlow version: 2.18.0 Keras version: 3.8.0
In [ ]:
# Loading the cifar10 Dataset
(train_images, train_labels), (test_images, test_labels) = keras.datasets.cifar10.load_data()
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 170498071/170498071 ━━━━━━━━━━━━━━━━━━━━ 14s 0us/step
In [ ]:
# Exploratory Data Analysis
print(f"train images shape`: {train_images.shape}")
print(f"train labels shape: {train_labels.shape}")
print(f"test images shape: {test_images.shape}")
print(f"test labels shape: {test_labels.shape}")
train images shape`: (50000, 32, 32, 3) train labels shape: (50000, 1) test images shape: (10000, 32, 32, 3) test labels shape: (10000, 1)
In [ ]:
# Explore the labels, labeled as a numerical digit that needs conversion
# to an item description
print(f"First 10 training labels: {train_labels[:10]}")
First 10 training labels: [[6] [9] [9] [4] [1] [1] [2] [7] [8] [3]]
In [ ]:
# Data Analysis Functions
def show_random_examples(x, y, p):
indices = np.random.choice(range(x.shape[0]), 10, replace=False)
x = x[indices]
y = y[indices]
p = p[indices]
plt.figure(figsize=(10, 5))
for i in range(10):
plt.subplot(2, 5, i + 1)
plt.imshow(x[i])
plt.xticks([])
plt.yticks([])
col = 'green' if np.argmax(y[i]) == np.argmax(p[i]) else 'red'
plt.xlabel(class_names_preview[np.argmax(p[i])], color=col)
plt.show()
def get_three_classes(x, y):
def indices_of(class_id):
indices, _ = np.where(y == float(class_id))
return indices
indices = np.concatenate([indices_of(0), indices_of(1), indices_of(2)], axis=0)
x = x[indices]
y = y[indices]
count = x.shape[0]
indices = np.random.choice(range(count), count, replace=False)
x = x[indices]
y = y[indices]
y = tf.keras.utils.to_categorical(y)
return x, y
def plot_history(history):
losses = history.history['loss']
accs = history.history['accuracy']
val_losses = history.history['val_loss']
val_accs = history.history['val_accuracy']
epochs = len(losses)
plt.figure(figsize=(16, 4))
for i, metrics in enumerate(zip([losses, accs], [val_losses, val_accs], ['Loss', 'Accuracy'])):
plt.subplot(1, 2, i + 1)
plt.plot(range(epochs), metrics[0], label='Training {}'.format(metrics[2]))
plt.plot(range(epochs), metrics[1], label='Validation {}'.format(metrics[2]))
plt.legend()
plt.show()
def display_training_curves(training, validation, title, subplot):
ax = plt.subplot(subplot)
ax.plot(training)
ax.plot(validation)
ax.set_title('model '+ title)
ax.set_ylabel(title)
ax.set_xlabel('epoch')
ax.legend(['training', 'validation'])
def print_validation_report(y_test, predictions):
print("Classification Report")
print(classification_report(y_test, predictions))
print('Accuracy Score: {}'.format(accuracy_score(y_test, predictions)))
print('Root Mean Square Error: {}'.format(np.sqrt(MSE(y_test, predictions))))
def plot_confusion_matrix(y_true, y_pred):
mtx = confusion_matrix(y_true, y_pred)
fig, ax = plt.subplots(figsize=(16,12))
sns.heatmap(mtx, annot=True, fmt='d', linewidths=.75, cbar=False, ax=ax,cmap='Blues',linecolor='white')
# square=True,
plt.ylabel('true label')
plt.xlabel('predicted label')
In [ ]:
train_image_preview, train_label_preview = get_three_classes(train_images, train_labels)
test_image_preview, test_label_preview = get_three_classes(test_images, test_labels)
class_names_preview = ['airplane', 'car', 'bird']
show_random_examples(train_image_preview, train_label_preview, train_label_preview)
In [ ]:
class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog','frog', 'horse' ,'ship' ,'truck']
In [ ]:
image_train_split, image_val_split, label_train_split, label_val_split = train_test_split(train_images, train_labels, test_size=.1, random_state=42, shuffle=True)
print(image_train_split.shape)
print(image_val_split.shape)
print(label_train_split.shape)
print(label_val_split.shape)
(45000, 32, 32, 3) (5000, 32, 32, 3) (45000, 1) (5000, 1)
In [ ]:
image_train_norm = image_train_split / 255.0
image_val_norm = image_val_split / 255.0
image_test_norm = test_images / 255.0
image_train_norm.shape
Out[ ]:
(45000, 32, 32, 3)
In [ ]:
def add_to_data(data, model, history, test_pred):
if data.get('model') is None:
# Build initial data for table
data['model'] = ['initial']
data['accuracy'] = [f"{history.history['accuracy'][-1]:.3f}"]
data['val_accuracy'] = [f"{history.history['val_accuracy'][-1]:.3f}"]
data['test_accuracy'] = [f"{test_pred[1]:.3f}"]
data['loss'] = [f"{history.history['loss'][-1]:.3f}"]
data['val_loss'] = [f"{history.history['val_loss'][-1]:.3f}"]
data['test_loss'] = [f"{test_pred[0]:.3f}"]
data['time'] = [f"{time_end - time_start:.3f}"]
else:
# Add to data table
data['model'].append(model)
data['accuracy'].append(f"{history.history['accuracy'][-1]:.3f}")
data['val_accuracy'].append(f"{history.history['val_accuracy'][-1]:.3f}")
data['test_accuracy'].append(f"{test_pred[1]:.3f}")
data['loss'].append(f"{history.history['loss'][-1]:.3f}")
data['val_loss'].append(f"{history.history['val_loss'][-1]:.3f}")
data['test_loss'].append(f"{test_pred[0]:.3f}")
data['time'].append(f"{time_end - time_start:.3f}")
In [ ]:
DNN_data = {}
DNN_nodes = [4,8,16,32,64,128,256,512,1024]
for node in DNN_nodes:
name = f'DNN_{node}_nodes'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Dense(units=node, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(DNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 9ms/step - accuracy: 0.2844 - loss: 2.0112 - val_accuracy: 0.3890 - val_loss: 1.7599 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4079 - loss: 1.7317 - val_accuracy: 0.3996 - val_loss: 1.7328 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4179 - loss: 1.6966 - val_accuracy: 0.4122 - val_loss: 1.7123 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4324 - loss: 1.6498 - val_accuracy: 0.4090 - val_loss: 1.7132 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.4340 - loss: 1.6538 - val_accuracy: 0.4152 - val_loss: 1.7034 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4445 - loss: 1.6227 - val_accuracy: 0.4120 - val_loss: 1.7016 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.4482 - loss: 1.6115 - val_accuracy: 0.4168 - val_loss: 1.6952 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4532 - loss: 1.6003 - val_accuracy: 0.4100 - val_loss: 1.7035 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4532 - loss: 1.5948 - val_accuracy: 0.4150 - val_loss: 1.6872 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.4235 - loss: 1.6649 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.46 0.50 0.48 1000 1 0.57 0.48 0.52 1000 2 0.25 0.38 0.30 1000 3 0.31 0.19 0.23 1000 4 0.39 0.21 0.27 1000 5 0.43 0.25 0.32 1000 6 0.38 0.66 0.48 1000 7 0.52 0.44 0.48 1000 8 0.51 0.56 0.53 1000 9 0.46 0.51 0.48 1000 accuracy 0.42 10000 macro avg 0.43 0.42 0.41 10000 weighted avg 0.43 0.42 0.41 10000 Accuracy Score: 0.4175 Root Mean Square Error: 3.4241787336527865 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3300 - loss: 1.8983 - val_accuracy: 0.3996 - val_loss: 1.7047 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4278 - loss: 1.6433 - val_accuracy: 0.4272 - val_loss: 1.6412 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4568 - loss: 1.5775 - val_accuracy: 0.4338 - val_loss: 1.6231 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4624 - loss: 1.5543 - val_accuracy: 0.4386 - val_loss: 1.6026 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.4697 - loss: 1.5284 - val_accuracy: 0.4458 - val_loss: 1.6026 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.4768 - loss: 1.5145 - val_accuracy: 0.4526 - val_loss: 1.5949 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4852 - loss: 1.5005 - val_accuracy: 0.4512 - val_loss: 1.5891 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4852 - loss: 1.4872 - val_accuracy: 0.4480 - val_loss: 1.5821 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4533 - loss: 1.5455 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.55 0.47 0.50 1000 1 0.54 0.57 0.56 1000 2 0.36 0.27 0.31 1000 3 0.35 0.18 0.24 1000 4 0.33 0.52 0.40 1000 5 0.38 0.31 0.34 1000 6 0.45 0.54 0.49 1000 7 0.53 0.49 0.51 1000 8 0.50 0.68 0.57 1000 9 0.55 0.53 0.54 1000 accuracy 0.46 10000 macro avg 0.45 0.46 0.45 10000 weighted avg 0.45 0.46 0.45 10000 Accuracy Score: 0.4553 Root Mean Square Error: 3.1846506872811027 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.3453 - loss: 1.8623 - val_accuracy: 0.4232 - val_loss: 1.6566 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4422 - loss: 1.6149 - val_accuracy: 0.4456 - val_loss: 1.5933 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 4ms/step - accuracy: 0.4639 - loss: 1.5436 - val_accuracy: 0.4488 - val_loss: 1.5765 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4777 - loss: 1.5077 - val_accuracy: 0.4468 - val_loss: 1.5686 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 8ms/step - accuracy: 0.4855 - loss: 1.4715 - val_accuracy: 0.4676 - val_loss: 1.5497 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 3ms/step - accuracy: 0.4963 - loss: 1.4469 - val_accuracy: 0.4640 - val_loss: 1.5303 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5034 - loss: 1.4355 - val_accuracy: 0.4578 - val_loss: 1.5431 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 7ms/step - accuracy: 0.4760 - loss: 1.4937 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.58 0.41 0.48 1000 1 0.55 0.65 0.60 1000 2 0.47 0.21 0.29 1000 3 0.29 0.41 0.34 1000 4 0.39 0.43 0.41 1000 5 0.38 0.44 0.41 1000 6 0.53 0.50 0.51 1000 7 0.49 0.54 0.52 1000 8 0.57 0.65 0.61 1000 9 0.60 0.49 0.54 1000 accuracy 0.47 10000 macro avg 0.49 0.47 0.47 10000 weighted avg 0.49 0.47 0.47 10000 Accuracy Score: 0.4727 Root Mean Square Error: 3.100709596205359 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.3403 - loss: 1.9643 - val_accuracy: 0.4358 - val_loss: 1.6217 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4613 - loss: 1.5630 - val_accuracy: 0.4680 - val_loss: 1.5509 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.4838 - loss: 1.4885 - val_accuracy: 0.4664 - val_loss: 1.5274 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.4970 - loss: 1.4594 - val_accuracy: 0.4668 - val_loss: 1.5274 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4764 - loss: 1.4792 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.53 0.50 0.51 1000 1 0.61 0.57 0.59 1000 2 0.37 0.24 0.29 1000 3 0.35 0.26 0.30 1000 4 0.37 0.49 0.42 1000 5 0.43 0.35 0.39 1000 6 0.47 0.60 0.53 1000 7 0.56 0.48 0.52 1000 8 0.49 0.72 0.58 1000 9 0.55 0.55 0.55 1000 accuracy 0.48 10000 macro avg 0.47 0.48 0.47 10000 weighted avg 0.47 0.48 0.47 10000 Accuracy Score: 0.4758 Root Mean Square Error: 3.1527606950100098 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3584 - loss: 1.8810 - val_accuracy: 0.4638 - val_loss: 1.5545 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 4ms/step - accuracy: 0.4789 - loss: 1.5002 - val_accuracy: 0.4702 - val_loss: 1.5406 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5056 - loss: 1.4350 - val_accuracy: 0.4802 - val_loss: 1.5108 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.5173 - loss: 1.4036 - val_accuracy: 0.4786 - val_loss: 1.4995 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5276 - loss: 1.3727 - val_accuracy: 0.4858 - val_loss: 1.5004 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5404 - loss: 1.3444 - val_accuracy: 0.4816 - val_loss: 1.4972 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5481 - loss: 1.3187 - val_accuracy: 0.4846 - val_loss: 1.5002 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4834 - loss: 1.4705 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 2ms/step Classification Report precision recall f1-score support 0 0.59 0.54 0.56 1000 1 0.63 0.55 0.59 1000 2 0.37 0.25 0.30 1000 3 0.36 0.25 0.29 1000 4 0.33 0.52 0.41 1000 5 0.47 0.28 0.35 1000 6 0.47 0.62 0.53 1000 7 0.47 0.60 0.53 1000 8 0.61 0.62 0.61 1000 9 0.56 0.59 0.58 1000 accuracy 0.48 10000 macro avg 0.49 0.48 0.47 10000 weighted avg 0.49 0.48 0.47 10000 Accuracy Score: 0.4815 Root Mean Square Error: 3.0739551070241737 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 8ms/step - accuracy: 0.3500 - loss: 2.1141 - val_accuracy: 0.4504 - val_loss: 1.5803 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.4799 - loss: 1.5043 - val_accuracy: 0.4676 - val_loss: 1.5243 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5025 - loss: 1.4369 - val_accuracy: 0.4800 - val_loss: 1.5154 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5120 - loss: 1.4046 - val_accuracy: 0.4778 - val_loss: 1.5011 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.5271 - loss: 1.3701 - val_accuracy: 0.4862 - val_loss: 1.4925 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5439 - loss: 1.3357 - val_accuracy: 0.4662 - val_loss: 1.5475 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.5550 - loss: 1.2974 - val_accuracy: 0.4752 - val_loss: 1.5116 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4786 - loss: 1.5006 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.63 0.37 0.47 1000 1 0.51 0.68 0.58 1000 2 0.44 0.26 0.33 1000 3 0.29 0.49 0.36 1000 4 0.43 0.35 0.39 1000 5 0.43 0.28 0.34 1000 6 0.49 0.57 0.53 1000 7 0.53 0.54 0.54 1000 8 0.58 0.64 0.61 1000 9 0.54 0.56 0.55 1000 accuracy 0.47 10000 macro avg 0.49 0.47 0.47 10000 weighted avg 0.49 0.47 0.47 10000 Accuracy Score: 0.4748 Root Mean Square Error: 3.1676647549890755 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.3559 - loss: 2.2746 - val_accuracy: 0.4646 - val_loss: 1.5617 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.4821 - loss: 1.4977 - val_accuracy: 0.4768 - val_loss: 1.5249 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5057 - loss: 1.4355 - val_accuracy: 0.4802 - val_loss: 1.5163 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5209 - loss: 1.3890 - val_accuracy: 0.4684 - val_loss: 1.5360 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5260 - loss: 1.3659 - val_accuracy: 0.4858 - val_loss: 1.5137 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5465 - loss: 1.3310 - val_accuracy: 0.4740 - val_loss: 1.5212 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.5514 - loss: 1.3051 - val_accuracy: 0.4910 - val_loss: 1.5105 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 9ms/step - accuracy: 0.5661 - loss: 1.2682 - val_accuracy: 0.4962 - val_loss: 1.4969 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 7ms/step - accuracy: 0.5713 - loss: 1.2461 - val_accuracy: 0.4886 - val_loss: 1.5199 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5835 - loss: 1.2092 - val_accuracy: 0.4886 - val_loss: 1.5086 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.4889 - loss: 1.5081 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.48 0.58 0.52 1000 1 0.62 0.53 0.57 1000 2 0.43 0.29 0.35 1000 3 0.36 0.28 0.32 1000 4 0.42 0.40 0.41 1000 5 0.42 0.41 0.41 1000 6 0.51 0.55 0.53 1000 7 0.53 0.53 0.53 1000 8 0.53 0.65 0.58 1000 9 0.50 0.61 0.55 1000 accuracy 0.48 10000 macro avg 0.48 0.48 0.48 10000 weighted avg 0.48 0.48 0.48 10000 Accuracy Score: 0.4838 Root Mean Square Error: 3.2677821224800163 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 14ms/step - accuracy: 0.3561 - loss: 2.6334 - val_accuracy: 0.4524 - val_loss: 1.5744 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 17s 11ms/step - accuracy: 0.4805 - loss: 1.5022 - val_accuracy: 0.4680 - val_loss: 1.5452 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 13ms/step - accuracy: 0.5026 - loss: 1.4396 - val_accuracy: 0.4740 - val_loss: 1.5291 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 11ms/step - accuracy: 0.5195 - loss: 1.3916 - val_accuracy: 0.4758 - val_loss: 1.5246 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.5305 - loss: 1.3709 - val_accuracy: 0.4802 - val_loss: 1.5127 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.5445 - loss: 1.3236 - val_accuracy: 0.4744 - val_loss: 1.5465 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 12ms/step - accuracy: 0.5559 - loss: 1.2887 - val_accuracy: 0.4912 - val_loss: 1.5051 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.5706 - loss: 1.2633 - val_accuracy: 0.4838 - val_loss: 1.5274 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.5812 - loss: 1.2233 - val_accuracy: 0.4882 - val_loss: 1.5321 313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.4890 - loss: 1.5230 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.46 0.54 0.50 1000 1 0.59 0.55 0.57 1000 2 0.35 0.40 0.37 1000 3 0.36 0.29 0.32 1000 4 0.51 0.29 0.37 1000 5 0.44 0.34 0.38 1000 6 0.48 0.62 0.54 1000 7 0.52 0.55 0.53 1000 8 0.55 0.67 0.60 1000 9 0.54 0.58 0.56 1000 accuracy 0.48 10000 macro avg 0.48 0.48 0.48 10000 weighted avg 0.48 0.48 0.48 10000 Accuracy Score: 0.4823 Root Mean Square Error: 3.2549039924397154 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 21s 24ms/step - accuracy: 0.3551 - loss: 2.8383 - val_accuracy: 0.4454 - val_loss: 1.5665 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 19ms/step - accuracy: 0.4760 - loss: 1.5199 - val_accuracy: 0.4460 - val_loss: 1.5730 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 21s 20ms/step - accuracy: 0.4906 - loss: 1.4648 - val_accuracy: 0.4762 - val_loss: 1.5281 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 20ms/step - accuracy: 0.5171 - loss: 1.4026 - val_accuracy: 0.4776 - val_loss: 1.5063 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 19ms/step - accuracy: 0.5257 - loss: 1.3659 - val_accuracy: 0.4632 - val_loss: 1.5633 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 19ms/step - accuracy: 0.5387 - loss: 1.3473 - val_accuracy: 0.4864 - val_loss: 1.5207 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 19ms/step - accuracy: 0.5511 - loss: 1.3077 - val_accuracy: 0.4820 - val_loss: 1.5135 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 21s 20ms/step - accuracy: 0.5606 - loss: 1.2781 - val_accuracy: 0.4932 - val_loss: 1.5050 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 19ms/step - accuracy: 0.5760 - loss: 1.2368 - val_accuracy: 0.4844 - val_loss: 1.5259 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 19ms/step - accuracy: 0.5832 - loss: 1.2101 - val_accuracy: 0.4880 - val_loss: 1.5375 313/313 ━━━━━━━━━━━━━━━━━━━━ 5s 9ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step - accuracy: 0.4812 - loss: 1.5315 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step Classification Report precision recall f1-score support 0 0.56 0.49 0.52 1000 1 0.55 0.64 0.59 1000 2 0.35 0.42 0.38 1000 3 0.34 0.33 0.33 1000 4 0.43 0.33 0.37 1000 5 0.47 0.23 0.31 1000 6 0.47 0.61 0.53 1000 7 0.56 0.52 0.54 1000 8 0.51 0.67 0.58 1000 9 0.56 0.53 0.54 1000 accuracy 0.48 10000 macro avg 0.48 0.48 0.47 10000 weighted avg 0.48 0.48 0.47 10000 Accuracy Score: 0.4778 Root Mean Square Error: 3.1756574122534063
In [ ]:
DNN_data_df = pd.DataFrame(DNN_data)
DNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.453 | 0.415 | 0.417 | 1.597 | 1.687 | 1.670 | 30.760 |
| 1 | DNN_8_nodes | 0.484 | 0.448 | 0.455 | 1.491 | 1.582 | 1.554 | 28.051 |
| 2 | DNN_16_nodes | 0.499 | 0.458 | 0.473 | 1.440 | 1.543 | 1.502 | 38.472 |
| 3 | DNN_32_nodes | 0.496 | 0.467 | 0.476 | 1.457 | 1.527 | 1.489 | 19.331 |
| 4 | DNN_64_nodes | 0.543 | 0.485 | 0.481 | 1.329 | 1.500 | 1.480 | 32.487 |
| 5 | DNN_128_nodes | 0.547 | 0.475 | 0.475 | 1.319 | 1.512 | 1.507 | 36.486 |
| 6 | DNN_256_nodes | 0.579 | 0.489 | 0.484 | 1.228 | 1.509 | 1.514 | 65.084 |
| 7 | DNN_512_nodes | 0.577 | 0.488 | 0.482 | 1.236 | 1.532 | 1.537 | 90.682 |
| 8 | DNN_1024_nodes | 0.580 | 0.488 | 0.478 | 1.223 | 1.537 | 1.536 | 187.932 |
In [ ]:
CNN_data = {}
CNN_filters = [4,8,16,32,64,128,256,512,1024]
for filter in CNN_filters:
name = f'CNN_{filter}_nodes'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=filter, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3306 - loss: 1.8806 - val_accuracy: 0.4228 - val_loss: 1.6452 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4461 - loss: 1.5875 - val_accuracy: 0.4482 - val_loss: 1.5620 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4770 - loss: 1.5092 - val_accuracy: 0.4552 - val_loss: 1.5465 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.4895 - loss: 1.4652 - val_accuracy: 0.4580 - val_loss: 1.5048 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5103 - loss: 1.4070 - val_accuracy: 0.4780 - val_loss: 1.4700 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.5172 - loss: 1.3792 - val_accuracy: 0.4764 - val_loss: 1.4635 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.5234 - loss: 1.3609 - val_accuracy: 0.4894 - val_loss: 1.4325 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5377 - loss: 1.3313 - val_accuracy: 0.4868 - val_loss: 1.4389 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5380 - loss: 1.3216 - val_accuracy: 0.4706 - val_loss: 1.5098 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4786 - loss: 1.5131 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.54 0.55 0.55 1000 1 0.51 0.70 0.59 1000 2 0.37 0.33 0.35 1000 3 0.40 0.22 0.28 1000 4 0.39 0.51 0.44 1000 5 0.57 0.21 0.30 1000 6 0.48 0.61 0.54 1000 7 0.58 0.42 0.49 1000 8 0.53 0.65 0.58 1000 9 0.46 0.57 0.51 1000 accuracy 0.48 10000 macro avg 0.48 0.48 0.46 10000 weighted avg 0.48 0.48 0.46 10000 Accuracy Score: 0.4772 Root Mean Square Error: 3.255610541818539 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.3471 - loss: 1.8380 - val_accuracy: 0.4698 - val_loss: 1.4977 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5055 - loss: 1.4008 - val_accuracy: 0.5022 - val_loss: 1.4039 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5534 - loss: 1.2825 - val_accuracy: 0.5352 - val_loss: 1.3181 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5763 - loss: 1.2164 - val_accuracy: 0.5330 - val_loss: 1.3188 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5945 - loss: 1.1705 - val_accuracy: 0.5522 - val_loss: 1.2825 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6105 - loss: 1.1236 - val_accuracy: 0.5324 - val_loss: 1.3119 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.6200 - loss: 1.1022 - val_accuracy: 0.5556 - val_loss: 1.2711 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6268 - loss: 1.0741 - val_accuracy: 0.5586 - val_loss: 1.2730 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6401 - loss: 1.0410 - val_accuracy: 0.5644 - val_loss: 1.2549 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6464 - loss: 1.0241 - val_accuracy: 0.5634 - val_loss: 1.2457 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6552 - loss: 1.0097 - val_accuracy: 0.5660 - val_loss: 1.2505 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.6557 - loss: 1.0050 - val_accuracy: 0.5634 - val_loss: 1.2497 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.6609 - loss: 0.9766 - val_accuracy: 0.5750 - val_loss: 1.2280 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6669 - loss: 0.9589 - val_accuracy: 0.5396 - val_loss: 1.3195 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6707 - loss: 0.9613 - val_accuracy: 0.5520 - val_loss: 1.2947 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.5589 - loss: 1.2745 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.61 0.62 0.62 1000 1 0.73 0.66 0.69 1000 2 0.47 0.32 0.38 1000 3 0.41 0.30 0.34 1000 4 0.35 0.74 0.47 1000 5 0.58 0.35 0.44 1000 6 0.54 0.61 0.57 1000 7 0.73 0.52 0.60 1000 8 0.68 0.75 0.71 1000 9 0.65 0.66 0.66 1000 accuracy 0.55 10000 macro avg 0.58 0.55 0.55 10000 weighted avg 0.58 0.55 0.55 10000 Accuracy Score: 0.553 Root Mean Square Error: 2.726554602424092 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.3850 - loss: 1.7462 - val_accuracy: 0.5286 - val_loss: 1.3383 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5634 - loss: 1.2641 - val_accuracy: 0.5628 - val_loss: 1.2617 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6075 - loss: 1.1450 - val_accuracy: 0.5556 - val_loss: 1.2809 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6289 - loss: 1.0844 - val_accuracy: 0.5726 - val_loss: 1.2157 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6517 - loss: 1.0237 - val_accuracy: 0.5878 - val_loss: 1.1967 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 3ms/step - accuracy: 0.6667 - loss: 0.9782 - val_accuracy: 0.5894 - val_loss: 1.1895 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.6714 - loss: 0.9515 - val_accuracy: 0.5920 - val_loss: 1.1845 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6928 - loss: 0.9077 - val_accuracy: 0.5926 - val_loss: 1.1797 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7004 - loss: 0.8827 - val_accuracy: 0.5646 - val_loss: 1.2773 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.7070 - loss: 0.8559 - val_accuracy: 0.5990 - val_loss: 1.2024 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7208 - loss: 0.8238 - val_accuracy: 0.5970 - val_loss: 1.1889 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7270 - loss: 0.8018 - val_accuracy: 0.5854 - val_loss: 1.2354 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.5833 - loss: 1.2379 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.51 0.78 0.61 1000 1 0.72 0.71 0.71 1000 2 0.39 0.48 0.43 1000 3 0.42 0.44 0.43 1000 4 0.57 0.39 0.46 1000 5 0.54 0.40 0.46 1000 6 0.68 0.73 0.71 1000 7 0.67 0.59 0.63 1000 8 0.65 0.70 0.67 1000 9 0.73 0.56 0.63 1000 accuracy 0.58 10000 macro avg 0.59 0.58 0.57 10000 weighted avg 0.59 0.58 0.57 10000 Accuracy Score: 0.5766 Root Mean Square Error: 2.8785760368626705 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3981 - loss: 1.7102 - val_accuracy: 0.5412 - val_loss: 1.3161 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5718 - loss: 1.2363 - val_accuracy: 0.5620 - val_loss: 1.2549 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6189 - loss: 1.1003 - val_accuracy: 0.5758 - val_loss: 1.2161 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6516 - loss: 1.0182 - val_accuracy: 0.5864 - val_loss: 1.1980 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6840 - loss: 0.9215 - val_accuracy: 0.6092 - val_loss: 1.1338 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7107 - loss: 0.8501 - val_accuracy: 0.6166 - val_loss: 1.1378 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7348 - loss: 0.7863 - val_accuracy: 0.6036 - val_loss: 1.1718 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7484 - loss: 0.7418 - val_accuracy: 0.6024 - val_loss: 1.1977 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.6002 - loss: 1.1987 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.69 0.58 0.63 1000 1 0.57 0.87 0.69 1000 2 0.58 0.33 0.42 1000 3 0.45 0.37 0.41 1000 4 0.51 0.57 0.53 1000 5 0.47 0.60 0.53 1000 6 0.73 0.69 0.71 1000 7 0.59 0.74 0.65 1000 8 0.74 0.68 0.71 1000 9 0.73 0.55 0.63 1000 accuracy 0.60 10000 macro avg 0.61 0.60 0.59 10000 weighted avg 0.61 0.60 0.59 10000 Accuracy Score: 0.5968 Root Mean Square Error: 2.762571266049077 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.3987 - loss: 1.7446 - val_accuracy: 0.5262 - val_loss: 1.3290 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5876 - loss: 1.1935 - val_accuracy: 0.5324 - val_loss: 1.3221 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.6423 - loss: 1.0555 - val_accuracy: 0.6044 - val_loss: 1.1315 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6811 - loss: 0.9305 - val_accuracy: 0.6138 - val_loss: 1.1241 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.7143 - loss: 0.8390 - val_accuracy: 0.6068 - val_loss: 1.1373 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7427 - loss: 0.7605 - val_accuracy: 0.6206 - val_loss: 1.1330 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7731 - loss: 0.6736 - val_accuracy: 0.5874 - val_loss: 1.2163 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 4ms/step - accuracy: 0.7924 - loss: 0.6258 - val_accuracy: 0.6186 - val_loss: 1.1588 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.6197 - loss: 1.1676 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.62 0.71 0.66 1000 1 0.66 0.82 0.73 1000 2 0.44 0.49 0.46 1000 3 0.43 0.46 0.44 1000 4 0.65 0.45 0.53 1000 5 0.57 0.47 0.52 1000 6 0.64 0.80 0.71 1000 7 0.76 0.63 0.69 1000 8 0.68 0.74 0.71 1000 9 0.78 0.57 0.66 1000 accuracy 0.61 10000 macro avg 0.62 0.61 0.61 10000 weighted avg 0.62 0.61 0.61 10000 Accuracy Score: 0.6142 Root Mean Square Error: 2.7010183264835503 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.4043 - loss: 1.7466 - val_accuracy: 0.5340 - val_loss: 1.3138 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.5867 - loss: 1.1987 - val_accuracy: 0.5400 - val_loss: 1.3182 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6333 - loss: 1.0680 - val_accuracy: 0.5776 - val_loss: 1.2260 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.6787 - loss: 0.9415 - val_accuracy: 0.6000 - val_loss: 1.1587 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.7249 - loss: 0.8195 - val_accuracy: 0.6140 - val_loss: 1.1580 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7563 - loss: 0.7186 - val_accuracy: 0.5936 - val_loss: 1.2217 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.7868 - loss: 0.6369 - val_accuracy: 0.6076 - val_loss: 1.2009 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.5963 - loss: 1.2332 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.67 0.58 0.62 1000 1 0.73 0.78 0.75 1000 2 0.43 0.47 0.45 1000 3 0.42 0.40 0.41 1000 4 0.56 0.46 0.50 1000 5 0.40 0.65 0.50 1000 6 0.80 0.56 0.66 1000 7 0.67 0.66 0.67 1000 8 0.73 0.73 0.73 1000 9 0.72 0.68 0.70 1000 accuracy 0.60 10000 macro avg 0.61 0.60 0.60 10000 weighted avg 0.61 0.60 0.60 10000 Accuracy Score: 0.5952 Root Mean Square Error: 2.6395643579954626 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 16ms/step - accuracy: 0.4029 - loss: 1.7842 - val_accuracy: 0.5284 - val_loss: 1.3454 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step - accuracy: 0.5756 - loss: 1.2207 - val_accuracy: 0.5444 - val_loss: 1.2917 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.6392 - loss: 1.0411 - val_accuracy: 0.5940 - val_loss: 1.1718 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 7ms/step - accuracy: 0.6918 - loss: 0.9045 - val_accuracy: 0.5996 - val_loss: 1.1806 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7359 - loss: 0.7665 - val_accuracy: 0.6212 - val_loss: 1.1602 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 9ms/step - accuracy: 0.7804 - loss: 0.6553 - val_accuracy: 0.6094 - val_loss: 1.2397 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 7ms/step - accuracy: 0.8169 - loss: 0.5554 - val_accuracy: 0.6106 - val_loss: 1.2469 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.6060 - loss: 1.2703 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.63 0.63 0.63 1000 1 0.75 0.73 0.74 1000 2 0.42 0.48 0.45 1000 3 0.42 0.39 0.41 1000 4 0.53 0.57 0.55 1000 5 0.47 0.54 0.50 1000 6 0.70 0.72 0.71 1000 7 0.74 0.61 0.67 1000 8 0.68 0.77 0.72 1000 9 0.81 0.58 0.67 1000 accuracy 0.60 10000 macro avg 0.61 0.60 0.60 10000 weighted avg 0.61 0.60 0.60 10000 Accuracy Score: 0.6018 Root Mean Square Error: 2.652753286681594 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 15ms/step - accuracy: 0.4116 - loss: 1.8043 - val_accuracy: 0.5382 - val_loss: 1.3293 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 17s 12ms/step - accuracy: 0.5806 - loss: 1.2061 - val_accuracy: 0.5652 - val_loss: 1.2534 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 12ms/step - accuracy: 0.6383 - loss: 1.0515 - val_accuracy: 0.5780 - val_loss: 1.2384 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 12ms/step - accuracy: 0.6865 - loss: 0.9117 - val_accuracy: 0.6054 - val_loss: 1.1728 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 12ms/step - accuracy: 0.7387 - loss: 0.7619 - val_accuracy: 0.5988 - val_loss: 1.2476 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 12ms/step - accuracy: 0.7849 - loss: 0.6416 - val_accuracy: 0.6004 - val_loss: 1.2663 313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.5993 - loss: 1.2715 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.59 0.70 0.64 1000 1 0.78 0.69 0.73 1000 2 0.46 0.44 0.45 1000 3 0.45 0.35 0.40 1000 4 0.50 0.57 0.53 1000 5 0.57 0.39 0.46 1000 6 0.54 0.82 0.65 1000 7 0.71 0.62 0.66 1000 8 0.68 0.75 0.71 1000 9 0.74 0.65 0.69 1000 accuracy 0.60 10000 macro avg 0.60 0.60 0.59 10000 weighted avg 0.60 0.60 0.59 10000 Accuracy Score: 0.5975 Root Mean Square Error: 2.7472895733795517 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 22s 26ms/step - accuracy: 0.3964 - loss: 1.8911 - val_accuracy: 0.5066 - val_loss: 1.4255 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 21ms/step - accuracy: 0.5684 - loss: 1.2362 - val_accuracy: 0.5442 - val_loss: 1.3103 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 21ms/step - accuracy: 0.6174 - loss: 1.1082 - val_accuracy: 0.5664 - val_loss: 1.2600 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 21ms/step - accuracy: 0.6682 - loss: 0.9639 - val_accuracy: 0.5830 - val_loss: 1.2297 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 21ms/step - accuracy: 0.7134 - loss: 0.8359 - val_accuracy: 0.6016 - val_loss: 1.2029 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 20ms/step - accuracy: 0.7544 - loss: 0.7156 - val_accuracy: 0.6004 - val_loss: 1.2565 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 20ms/step - accuracy: 0.7951 - loss: 0.6057 - val_accuracy: 0.5990 - val_loss: 1.3084 313/313 ━━━━━━━━━━━━━━━━━━━━ 4s 9ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step - accuracy: 0.5888 - loss: 1.3446 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step Classification Report precision recall f1-score support 0 0.63 0.60 0.62 1000 1 0.81 0.63 0.71 1000 2 0.42 0.49 0.45 1000 3 0.40 0.38 0.39 1000 4 0.55 0.47 0.50 1000 5 0.40 0.61 0.49 1000 6 0.72 0.70 0.71 1000 7 0.73 0.54 0.62 1000 8 0.69 0.72 0.70 1000 9 0.68 0.69 0.68 1000 accuracy 0.58 10000 macro avg 0.60 0.58 0.59 10000 weighted avg 0.60 0.58 0.59 10000 Accuracy Score: 0.5831 Root Mean Square Error: 2.709833943251874
In [ ]:
CNN_data_df = pd.DataFrame(CNN_data)
CNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.536 | 0.471 | 0.477 | 1.328 | 1.510 | 1.512 | 29.283 |
| 1 | CNN_8_nodes | 0.666 | 0.552 | 0.553 | 0.970 | 1.295 | 1.296 | 48.320 |
| 2 | CNN_16_nodes | 0.721 | 0.585 | 0.577 | 0.817 | 1.235 | 1.257 | 40.049 |
| 3 | CNN_32_nodes | 0.740 | 0.602 | 0.597 | 0.760 | 1.198 | 1.218 | 32.941 |
| 4 | CNN_64_nodes | 0.789 | 0.619 | 0.614 | 0.630 | 1.159 | 1.193 | 36.042 |
| 5 | CNN_128_nodes | 0.780 | 0.608 | 0.595 | 0.653 | 1.201 | 1.257 | 33.441 |
| 6 | CNN_256_nodes | 0.806 | 0.611 | 0.602 | 0.572 | 1.247 | 1.292 | 61.605 |
| 7 | CNN_512_nodes | 0.775 | 0.600 | 0.598 | 0.659 | 1.266 | 1.291 | 69.849 |
| 8 | CNN_1024_nodes | 0.789 | 0.599 | 0.583 | 0.619 | 1.308 | 1.374 | 120.000 |
In [ ]:
DNN_nodes = [4,8,16,32,64,128,256,512,1024]
for node in DNN_nodes:
name = f'DNN_64_{node}_nodes'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Dense(units=64, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Dense(units=node, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(DNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.3199 - loss: 1.9107 - val_accuracy: 0.4070 - val_loss: 1.7060 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 4ms/step - accuracy: 0.4272 - loss: 1.6550 - val_accuracy: 0.4206 - val_loss: 1.6507 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4479 - loss: 1.5965 - val_accuracy: 0.4366 - val_loss: 1.6328 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.4571 - loss: 1.5759 - val_accuracy: 0.4334 - val_loss: 1.6178 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.4668 - loss: 1.5656 - val_accuracy: 0.4242 - val_loss: 1.6512 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4424 - loss: 1.6039 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.53 0.50 0.51 1000 1 0.45 0.71 0.55 1000 2 0.39 0.20 0.26 1000 3 0.28 0.35 0.31 1000 4 0.38 0.40 0.39 1000 5 0.50 0.23 0.32 1000 6 0.40 0.68 0.50 1000 7 0.45 0.56 0.50 1000 8 0.71 0.45 0.55 1000 9 0.56 0.37 0.45 1000 accuracy 0.44 10000 macro avg 0.46 0.44 0.43 10000 weighted avg 0.46 0.44 0.43 10000 Accuracy Score: 0.4438 Root Mean Square Error: 3.285589749192677 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 13ms/step - accuracy: 0.3351 - loss: 1.8834 - val_accuracy: 0.4342 - val_loss: 1.6300 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4511 - loss: 1.5847 - val_accuracy: 0.4402 - val_loss: 1.6105 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.4672 - loss: 1.5410 - val_accuracy: 0.4502 - val_loss: 1.5765 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.4834 - loss: 1.5010 - val_accuracy: 0.4572 - val_loss: 1.5636 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.4874 - loss: 1.4810 - val_accuracy: 0.4654 - val_loss: 1.5505 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.4954 - loss: 1.4755 - val_accuracy: 0.4596 - val_loss: 1.5547 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 4ms/step - accuracy: 0.4963 - loss: 1.4571 - val_accuracy: 0.4588 - val_loss: 1.5538 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4748 - loss: 1.5121 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.53 0.50 0.52 1000 1 0.64 0.48 0.55 1000 2 0.36 0.34 0.35 1000 3 0.33 0.19 0.24 1000 4 0.43 0.31 0.36 1000 5 0.42 0.39 0.41 1000 6 0.40 0.73 0.52 1000 7 0.48 0.57 0.52 1000 8 0.62 0.58 0.60 1000 9 0.52 0.61 0.56 1000 accuracy 0.47 10000 macro avg 0.47 0.47 0.46 10000 weighted avg 0.47 0.47 0.46 10000 Accuracy Score: 0.4713 Root Mean Square Error: 3.191786333700926 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 7ms/step - accuracy: 0.3454 - loss: 1.8633 - val_accuracy: 0.4414 - val_loss: 1.6035 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 5ms/step - accuracy: 0.4703 - loss: 1.5364 - val_accuracy: 0.4660 - val_loss: 1.5501 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.4870 - loss: 1.4874 - val_accuracy: 0.4732 - val_loss: 1.5298 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5035 - loss: 1.4518 - val_accuracy: 0.4770 - val_loss: 1.5270 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5047 - loss: 1.4348 - val_accuracy: 0.4734 - val_loss: 1.5327 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 6ms/step - accuracy: 0.5215 - loss: 1.4029 - val_accuracy: 0.4730 - val_loss: 1.5113 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 7ms/step - accuracy: 0.4916 - loss: 1.4694 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.54 0.55 0.55 1000 1 0.59 0.57 0.58 1000 2 0.39 0.36 0.37 1000 3 0.34 0.37 0.36 1000 4 0.53 0.19 0.28 1000 5 0.43 0.34 0.38 1000 6 0.42 0.73 0.53 1000 7 0.56 0.55 0.55 1000 8 0.60 0.62 0.61 1000 9 0.56 0.61 0.58 1000 accuracy 0.49 10000 macro avg 0.50 0.49 0.48 10000 weighted avg 0.50 0.49 0.48 10000 Accuracy Score: 0.4891 Root Mean Square Error: 3.131948275434957 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.3724 - loss: 1.8080 - val_accuracy: 0.4550 - val_loss: 1.5926 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.4810 - loss: 1.5157 - val_accuracy: 0.4738 - val_loss: 1.5335 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5065 - loss: 1.4444 - val_accuracy: 0.4872 - val_loss: 1.5002 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5189 - loss: 1.4110 - val_accuracy: 0.4720 - val_loss: 1.5144 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.5330 - loss: 1.3749 - val_accuracy: 0.4800 - val_loss: 1.5173 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4885 - loss: 1.4866 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.55 0.58 0.57 1000 1 0.51 0.73 0.60 1000 2 0.39 0.32 0.35 1000 3 0.45 0.17 0.25 1000 4 0.42 0.47 0.45 1000 5 0.33 0.59 0.43 1000 6 0.53 0.53 0.53 1000 7 0.60 0.49 0.54 1000 8 0.70 0.52 0.60 1000 9 0.60 0.51 0.55 1000 accuracy 0.49 10000 macro avg 0.51 0.49 0.49 10000 weighted avg 0.51 0.49 0.49 10000 Accuracy Score: 0.4919 Root Mean Square Error: 3.0989191664191567 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 10ms/step - accuracy: 0.3642 - loss: 1.8953 - val_accuracy: 0.4690 - val_loss: 1.5624 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.4872 - loss: 1.5217 - val_accuracy: 0.4712 - val_loss: 1.5264 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4993 - loss: 1.4644 - val_accuracy: 0.4518 - val_loss: 1.5887 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5184 - loss: 1.4180 - val_accuracy: 0.4798 - val_loss: 1.5086 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5380 - loss: 1.3679 - val_accuracy: 0.4908 - val_loss: 1.4983 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5474 - loss: 1.3370 - val_accuracy: 0.4750 - val_loss: 1.5342 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.5551 - loss: 1.3146 - val_accuracy: 0.4922 - val_loss: 1.5121 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5716 - loss: 1.2900 - val_accuracy: 0.4890 - val_loss: 1.5082 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5797 - loss: 1.2513 - val_accuracy: 0.4842 - val_loss: 1.5326 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step - accuracy: 0.4865 - loss: 1.5091 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.48 0.63 0.55 1000 1 0.62 0.57 0.59 1000 2 0.38 0.34 0.36 1000 3 0.33 0.40 0.36 1000 4 0.40 0.39 0.39 1000 5 0.41 0.42 0.42 1000 6 0.55 0.48 0.51 1000 7 0.59 0.49 0.54 1000 8 0.59 0.60 0.59 1000 9 0.61 0.55 0.58 1000 accuracy 0.49 10000 macro avg 0.50 0.49 0.49 10000 weighted avg 0.50 0.49 0.49 10000 Accuracy Score: 0.4881 Root Mean Square Error: 3.129185197459556 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 9ms/step - accuracy: 0.3678 - loss: 1.9430 - val_accuracy: 0.4600 - val_loss: 1.5571 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 7ms/step - accuracy: 0.4867 - loss: 1.5013 - val_accuracy: 0.4764 - val_loss: 1.5275 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5094 - loss: 1.4375 - val_accuracy: 0.4888 - val_loss: 1.4913 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5329 - loss: 1.3827 - val_accuracy: 0.4900 - val_loss: 1.4849 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.5493 - loss: 1.3339 - val_accuracy: 0.4838 - val_loss: 1.5054 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 9ms/step - accuracy: 0.5591 - loss: 1.3077 - val_accuracy: 0.4858 - val_loss: 1.5129 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.4905 - loss: 1.5012 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.43 0.66 0.52 1000 1 0.53 0.69 0.60 1000 2 0.39 0.29 0.34 1000 3 0.37 0.32 0.34 1000 4 0.38 0.53 0.44 1000 5 0.50 0.27 0.35 1000 6 0.54 0.49 0.52 1000 7 0.63 0.50 0.56 1000 8 0.65 0.57 0.61 1000 9 0.56 0.56 0.56 1000 accuracy 0.49 10000 macro avg 0.50 0.49 0.48 10000 weighted avg 0.50 0.49 0.48 10000 Accuracy Score: 0.4895 Root Mean Square Error: 3.2140939625343874 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 13ms/step - accuracy: 0.3678 - loss: 1.9951 - val_accuracy: 0.4700 - val_loss: 1.5529 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.4970 - loss: 1.4873 - val_accuracy: 0.4806 - val_loss: 1.5199 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.5074 - loss: 1.4324 - val_accuracy: 0.4858 - val_loss: 1.4937 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.5318 - loss: 1.3799 - val_accuracy: 0.4970 - val_loss: 1.4881 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.5495 - loss: 1.3359 - val_accuracy: 0.4910 - val_loss: 1.5168 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.5625 - loss: 1.2943 - val_accuracy: 0.4920 - val_loss: 1.4982 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.5026 - loss: 1.4739 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.52 0.61 0.56 1000 1 0.60 0.60 0.60 1000 2 0.41 0.23 0.29 1000 3 0.38 0.26 0.31 1000 4 0.47 0.35 0.40 1000 5 0.37 0.54 0.44 1000 6 0.46 0.66 0.54 1000 7 0.57 0.54 0.56 1000 8 0.66 0.56 0.61 1000 9 0.56 0.64 0.60 1000 accuracy 0.50 10000 macro avg 0.50 0.50 0.49 10000 weighted avg 0.50 0.50 0.49 10000 Accuracy Score: 0.4999 Root Mean Square Error: 3.1060264004029325 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 16s 19ms/step - accuracy: 0.3823 - loss: 1.9819 - val_accuracy: 0.4628 - val_loss: 1.5730 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 17ms/step - accuracy: 0.4945 - loss: 1.4871 - val_accuracy: 0.4834 - val_loss: 1.5179 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 19ms/step - accuracy: 0.5201 - loss: 1.4164 - val_accuracy: 0.4844 - val_loss: 1.5020 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 18ms/step - accuracy: 0.5353 - loss: 1.3524 - val_accuracy: 0.4898 - val_loss: 1.5043 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 16ms/step - accuracy: 0.5578 - loss: 1.3084 - val_accuracy: 0.4864 - val_loss: 1.5041 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 16ms/step - accuracy: 0.5752 - loss: 1.2637 - val_accuracy: 0.4880 - val_loss: 1.5320 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.4918 - loss: 1.5106 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step Classification Report precision recall f1-score support 0 0.38 0.68 0.49 1000 1 0.68 0.53 0.60 1000 2 0.40 0.33 0.36 1000 3 0.39 0.28 0.33 1000 4 0.45 0.39 0.42 1000 5 0.40 0.47 0.43 1000 6 0.53 0.54 0.54 1000 7 0.61 0.49 0.54 1000 8 0.56 0.64 0.59 1000 9 0.62 0.54 0.58 1000 accuracy 0.49 10000 macro avg 0.50 0.49 0.49 10000 weighted avg 0.50 0.49 0.49 10000 Accuracy Score: 0.4896 Root Mean Square Error: 3.2085199079949622 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 25s 32ms/step - accuracy: 0.3634 - loss: 2.5537 - val_accuracy: 0.4568 - val_loss: 1.5820 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 38s 30ms/step - accuracy: 0.4848 - loss: 1.5105 - val_accuracy: 0.4648 - val_loss: 1.5396 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 21s 30ms/step - accuracy: 0.5142 - loss: 1.4233 - val_accuracy: 0.4848 - val_loss: 1.5259 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 41s 29ms/step - accuracy: 0.5335 - loss: 1.3743 - val_accuracy: 0.4934 - val_loss: 1.4881 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 21s 30ms/step - accuracy: 0.5601 - loss: 1.3099 - val_accuracy: 0.4928 - val_loss: 1.5144 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 29ms/step - accuracy: 0.5669 - loss: 1.2857 - val_accuracy: 0.4840 - val_loss: 1.5106 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step - accuracy: 0.4891 - loss: 1.4926 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step Classification Report precision recall f1-score support 0 0.55 0.53 0.54 1000 1 0.70 0.48 0.57 1000 2 0.36 0.36 0.36 1000 3 0.33 0.35 0.34 1000 4 0.36 0.51 0.42 1000 5 0.45 0.31 0.36 1000 6 0.47 0.60 0.53 1000 7 0.58 0.51 0.54 1000 8 0.67 0.57 0.62 1000 9 0.54 0.63 0.58 1000 accuracy 0.49 10000 macro avg 0.50 0.49 0.49 10000 weighted avg 0.50 0.49 0.49 10000 Accuracy Score: 0.4853 Root Mean Square Error: 3.0737924458232375
In [ ]:
DNN_data_df = pd.DataFrame(DNN_data)
DNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.453 | 0.415 | 0.417 | 1.597 | 1.687 | 1.670 | 30.760 |
| 1 | DNN_8_nodes | 0.484 | 0.448 | 0.455 | 1.491 | 1.582 | 1.554 | 28.051 |
| 2 | DNN_16_nodes | 0.499 | 0.458 | 0.473 | 1.440 | 1.543 | 1.502 | 38.472 |
| 3 | DNN_32_nodes | 0.496 | 0.467 | 0.476 | 1.457 | 1.527 | 1.489 | 19.331 |
| 4 | DNN_64_nodes | 0.543 | 0.485 | 0.481 | 1.329 | 1.500 | 1.480 | 32.487 |
| 5 | DNN_128_nodes | 0.547 | 0.475 | 0.475 | 1.319 | 1.512 | 1.507 | 36.486 |
| 6 | DNN_256_nodes | 0.579 | 0.489 | 0.484 | 1.228 | 1.509 | 1.514 | 65.084 |
| 7 | DNN_512_nodes | 0.577 | 0.488 | 0.482 | 1.236 | 1.532 | 1.537 | 90.682 |
| 8 | DNN_1024_nodes | 0.580 | 0.488 | 0.478 | 1.223 | 1.537 | 1.536 | 187.932 |
| 9 | DNN_64_4_nodes | 0.464 | 0.424 | 0.444 | 1.566 | 1.651 | 1.605 | 27.527 |
| 10 | DNN_64_8_nodes | 0.497 | 0.459 | 0.471 | 1.462 | 1.554 | 1.523 | 43.371 |
| 11 | DNN_64_16_nodes | 0.518 | 0.473 | 0.489 | 1.410 | 1.511 | 1.479 | 37.811 |
| 12 | DNN_64_32_nodes | 0.530 | 0.480 | 0.492 | 1.383 | 1.517 | 1.486 | 29.874 |
| 13 | DNN_64_64_nodes | 0.580 | 0.484 | 0.488 | 1.256 | 1.533 | 1.514 | 54.106 |
| 14 | DNN_64_128_nodes | 0.557 | 0.486 | 0.489 | 1.311 | 1.513 | 1.503 | 44.237 |
| 15 | DNN_64_256_nodes | 0.563 | 0.492 | 0.500 | 1.294 | 1.498 | 1.477 | 61.046 |
| 16 | DNN_64_512_nodes | 0.571 | 0.488 | 0.490 | 1.274 | 1.532 | 1.511 | 95.996 |
| 17 | DNN_64_1024_nodes | 0.566 | 0.484 | 0.485 | 1.285 | 1.511 | 1.499 | 168.276 |
In [ ]:
CNN_filters = [4,8,16,32,64,128,256,512,1024]
for filter in CNN_filters:
name = f'CNN_32_{filter}_nodes'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Conv2D(filters=filter, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.2926 - loss: 1.9465 - val_accuracy: 0.4276 - val_loss: 1.5717 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.4405 - loss: 1.5560 - val_accuracy: 0.4550 - val_loss: 1.5173 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.4745 - loss: 1.4802 - val_accuracy: 0.4456 - val_loss: 1.5282 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.4940 - loss: 1.4199 - val_accuracy: 0.4874 - val_loss: 1.4342 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.5365 - loss: 1.3209 - val_accuracy: 0.5074 - val_loss: 1.3683 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5555 - loss: 1.2743 - val_accuracy: 0.5184 - val_loss: 1.3578 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.5621 - loss: 1.2476 - val_accuracy: 0.5260 - val_loss: 1.3184 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5735 - loss: 1.2200 - val_accuracy: 0.5420 - val_loss: 1.2996 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.5886 - loss: 1.1832 - val_accuracy: 0.5434 - val_loss: 1.2860 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.5933 - loss: 1.1678 - val_accuracy: 0.5388 - val_loss: 1.3299 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5977 - loss: 1.1529 - val_accuracy: 0.5396 - val_loss: 1.2887 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.5455 - loss: 1.2861 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.61 0.59 0.60 1000 1 0.74 0.63 0.68 1000 2 0.42 0.38 0.40 1000 3 0.38 0.41 0.39 1000 4 0.46 0.47 0.46 1000 5 0.44 0.46 0.45 1000 6 0.70 0.64 0.67 1000 7 0.54 0.61 0.58 1000 8 0.65 0.67 0.66 1000 9 0.58 0.62 0.60 1000 accuracy 0.55 10000 macro avg 0.55 0.55 0.55 10000 weighted avg 0.55 0.55 0.55 10000 Accuracy Score: 0.5479 Root Mean Square Error: 2.9377542443165665 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3534 - loss: 1.7780 - val_accuracy: 0.3812 - val_loss: 1.7422 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 8ms/step - accuracy: 0.5195 - loss: 1.3467 - val_accuracy: 0.5222 - val_loss: 1.3285 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5594 - loss: 1.2477 - val_accuracy: 0.5540 - val_loss: 1.2446 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.5829 - loss: 1.1954 - val_accuracy: 0.5538 - val_loss: 1.2547 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 6ms/step - accuracy: 0.5953 - loss: 1.1482 - val_accuracy: 0.5788 - val_loss: 1.1945 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step - accuracy: 0.6151 - loss: 1.1100 - val_accuracy: 0.5662 - val_loss: 1.2236 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 5ms/step - accuracy: 0.6227 - loss: 1.0725 - val_accuracy: 0.5792 - val_loss: 1.1872 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.6388 - loss: 1.0396 - val_accuracy: 0.5796 - val_loss: 1.1888 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6517 - loss: 1.0054 - val_accuracy: 0.5680 - val_loss: 1.2500 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6561 - loss: 0.9895 - val_accuracy: 0.5840 - val_loss: 1.1800 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.6643 - loss: 0.9578 - val_accuracy: 0.5900 - val_loss: 1.1598 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.6749 - loss: 0.9297 - val_accuracy: 0.5826 - val_loss: 1.2095 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6811 - loss: 0.9197 - val_accuracy: 0.5888 - val_loss: 1.1979 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.5752 - loss: 1.2261 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.56 0.63 0.59 1000 1 0.65 0.76 0.70 1000 2 0.46 0.42 0.44 1000 3 0.49 0.18 0.27 1000 4 0.53 0.51 0.52 1000 5 0.52 0.46 0.49 1000 6 0.58 0.74 0.65 1000 7 0.62 0.69 0.65 1000 8 0.59 0.76 0.66 1000 9 0.65 0.60 0.63 1000 accuracy 0.57 10000 macro avg 0.57 0.57 0.56 10000 weighted avg 0.57 0.57 0.56 10000 Accuracy Score: 0.5739 Root Mean Square Error: 2.889498226336192 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 7ms/step - accuracy: 0.3485 - loss: 1.7982 - val_accuracy: 0.5050 - val_loss: 1.3838 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5456 - loss: 1.3005 - val_accuracy: 0.5718 - val_loss: 1.2288 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.6074 - loss: 1.1254 - val_accuracy: 0.5858 - val_loss: 1.1691 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6478 - loss: 1.0171 - val_accuracy: 0.6134 - val_loss: 1.0953 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6775 - loss: 0.9382 - val_accuracy: 0.6114 - val_loss: 1.1084 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.6923 - loss: 0.8858 - val_accuracy: 0.6150 - val_loss: 1.1085 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7126 - loss: 0.8296 - val_accuracy: 0.6232 - val_loss: 1.0866 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7286 - loss: 0.7838 - val_accuracy: 0.6212 - val_loss: 1.0856 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7440 - loss: 0.7399 - val_accuracy: 0.6132 - val_loss: 1.1289 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.6176 - loss: 1.1327 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.65 0.67 0.66 1000 1 0.67 0.80 0.73 1000 2 0.41 0.56 0.47 1000 3 0.47 0.38 0.42 1000 4 0.57 0.49 0.53 1000 5 0.57 0.46 0.51 1000 6 0.66 0.76 0.70 1000 7 0.70 0.67 0.68 1000 8 0.79 0.68 0.73 1000 9 0.70 0.67 0.69 1000 accuracy 0.61 10000 macro avg 0.62 0.61 0.61 10000 weighted avg 0.62 0.61 0.61 10000 Accuracy Score: 0.6141 Root Mean Square Error: 2.663813056503778 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 12ms/step - accuracy: 0.3803 - loss: 1.7237 - val_accuracy: 0.5432 - val_loss: 1.2711 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5948 - loss: 1.1649 - val_accuracy: 0.5830 - val_loss: 1.1737 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6620 - loss: 0.9802 - val_accuracy: 0.6292 - val_loss: 1.0553 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.7042 - loss: 0.8528 - val_accuracy: 0.6426 - val_loss: 1.0295 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 4ms/step - accuracy: 0.7434 - loss: 0.7532 - val_accuracy: 0.6434 - val_loss: 1.0453 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7764 - loss: 0.6506 - val_accuracy: 0.6180 - val_loss: 1.1308 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.8050 - loss: 0.5708 - val_accuracy: 0.6126 - val_loss: 1.2102 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.6172 - loss: 1.1935 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.64 0.65 0.64 1000 1 0.61 0.88 0.72 1000 2 0.53 0.36 0.43 1000 3 0.44 0.41 0.42 1000 4 0.60 0.51 0.55 1000 5 0.51 0.55 0.53 1000 6 0.72 0.70 0.71 1000 7 0.68 0.68 0.68 1000 8 0.71 0.74 0.72 1000 9 0.67 0.67 0.67 1000 accuracy 0.61 10000 macro avg 0.61 0.61 0.61 10000 weighted avg 0.61 0.61 0.61 10000 Accuracy Score: 0.6147 Root Mean Square Error: 2.6944572737380716 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 8ms/step - accuracy: 0.3672 - loss: 1.8107 - val_accuracy: 0.5382 - val_loss: 1.2919 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5762 - loss: 1.2095 - val_accuracy: 0.5816 - val_loss: 1.1835 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.6504 - loss: 1.0156 - val_accuracy: 0.6140 - val_loss: 1.0852 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.7000 - loss: 0.8778 - val_accuracy: 0.6238 - val_loss: 1.0838 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7475 - loss: 0.7422 - val_accuracy: 0.6320 - val_loss: 1.0899 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.7845 - loss: 0.6309 - val_accuracy: 0.6356 - val_loss: 1.0923 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.8227 - loss: 0.5330 - val_accuracy: 0.6290 - val_loss: 1.2045 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.8537 - loss: 0.4410 - val_accuracy: 0.6104 - val_loss: 1.2915 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.6026 - loss: 1.3122 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.61 0.70 0.65 1000 1 0.77 0.68 0.72 1000 2 0.47 0.50 0.48 1000 3 0.38 0.52 0.44 1000 4 0.64 0.43 0.51 1000 5 0.54 0.45 0.49 1000 6 0.75 0.64 0.69 1000 7 0.66 0.68 0.67 1000 8 0.64 0.76 0.70 1000 9 0.70 0.70 0.70 1000 accuracy 0.60 10000 macro avg 0.62 0.60 0.61 10000 weighted avg 0.62 0.60 0.61 10000 Accuracy Score: 0.605 Root Mean Square Error: 2.711604690953311 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.4216 - loss: 1.6331 - val_accuracy: 0.5966 - val_loss: 1.1444 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 8ms/step - accuracy: 0.6462 - loss: 1.0185 - val_accuracy: 0.6394 - val_loss: 1.0210 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.7215 - loss: 0.8046 - val_accuracy: 0.6442 - val_loss: 1.0065 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 8ms/step - accuracy: 0.7924 - loss: 0.6170 - val_accuracy: 0.6612 - val_loss: 0.9980 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step - accuracy: 0.8492 - loss: 0.4544 - val_accuracy: 0.6482 - val_loss: 1.1292 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 8ms/step - accuracy: 0.8981 - loss: 0.3131 - val_accuracy: 0.6470 - val_loss: 1.1969 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.6462 - loss: 1.2318 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.64 0.69 0.66 1000 1 0.81 0.74 0.77 1000 2 0.54 0.51 0.52 1000 3 0.41 0.53 0.46 1000 4 0.63 0.56 0.60 1000 5 0.63 0.43 0.51 1000 6 0.72 0.75 0.74 1000 7 0.69 0.68 0.69 1000 8 0.70 0.82 0.75 1000 9 0.74 0.73 0.74 1000 accuracy 0.64 10000 macro avg 0.65 0.64 0.64 10000 weighted avg 0.65 0.64 0.64 10000 Accuracy Score: 0.6449 Root Mean Square Error: 2.560683502504751 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 15ms/step - accuracy: 0.4143 - loss: 1.6843 - val_accuracy: 0.5588 - val_loss: 1.2327 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.6497 - loss: 1.0226 - val_accuracy: 0.6252 - val_loss: 1.0530 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 12ms/step - accuracy: 0.7243 - loss: 0.8112 - val_accuracy: 0.6604 - val_loss: 0.9856 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.7898 - loss: 0.6264 - val_accuracy: 0.6534 - val_loss: 1.0468 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.8488 - loss: 0.4606 - val_accuracy: 0.6578 - val_loss: 1.1021 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.6463 - loss: 1.1230 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.69 0.68 0.68 1000 1 0.80 0.71 0.75 1000 2 0.46 0.63 0.53 1000 3 0.44 0.48 0.46 1000 4 0.62 0.50 0.55 1000 5 0.57 0.53 0.55 1000 6 0.77 0.71 0.74 1000 7 0.70 0.72 0.71 1000 8 0.77 0.74 0.75 1000 9 0.71 0.74 0.72 1000 accuracy 0.64 10000 macro avg 0.65 0.64 0.65 10000 weighted avg 0.65 0.64 0.65 10000 Accuracy Score: 0.6425 Root Mean Square Error: 2.5450933185248825 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 22s 25ms/step - accuracy: 0.4384 - loss: 1.6138 - val_accuracy: 0.5676 - val_loss: 1.1782 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 20ms/step - accuracy: 0.6796 - loss: 0.9399 - val_accuracy: 0.6492 - val_loss: 1.0061 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 20ms/step - accuracy: 0.7596 - loss: 0.7059 - val_accuracy: 0.6596 - val_loss: 0.9816 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 19ms/step - accuracy: 0.8379 - loss: 0.4874 - val_accuracy: 0.6606 - val_loss: 1.0353 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 19ms/step - accuracy: 0.9047 - loss: 0.3012 - val_accuracy: 0.6552 - val_loss: 1.2170 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 21ms/step - accuracy: 0.9502 - loss: 0.1675 - val_accuracy: 0.6606 - val_loss: 1.3805 313/313 ━━━━━━━━━━━━━━━━━━━━ 4s 9ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 6ms/step - accuracy: 0.6568 - loss: 1.3964 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step Classification Report precision recall f1-score support 0 0.72 0.63 0.67 1000 1 0.86 0.71 0.78 1000 2 0.52 0.50 0.51 1000 3 0.46 0.46 0.46 1000 4 0.59 0.64 0.61 1000 5 0.55 0.62 0.58 1000 6 0.69 0.75 0.72 1000 7 0.72 0.65 0.68 1000 8 0.74 0.81 0.77 1000 9 0.74 0.74 0.74 1000 accuracy 0.65 10000 macro avg 0.66 0.65 0.65 10000 weighted avg 0.66 0.65 0.65 10000 Accuracy Score: 0.6518 Root Mean Square Error: 2.4451789300580846 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 36s 42ms/step - accuracy: 0.4233 - loss: 1.7898 - val_accuracy: 0.5978 - val_loss: 1.1409 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 26s 37ms/step - accuracy: 0.6484 - loss: 1.0133 - val_accuracy: 0.6468 - val_loss: 1.0066 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 25s 36ms/step - accuracy: 0.7221 - loss: 0.8125 - val_accuracy: 0.6482 - val_loss: 1.0196 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 24s 35ms/step - accuracy: 0.7860 - loss: 0.6343 - val_accuracy: 0.6618 - val_loss: 1.0161 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 41s 35ms/step - accuracy: 0.8496 - loss: 0.4554 - val_accuracy: 0.6610 - val_loss: 1.0671 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 41s 35ms/step - accuracy: 0.8986 - loss: 0.3144 - val_accuracy: 0.6514 - val_loss: 1.2289 313/313 ━━━━━━━━━━━━━━━━━━━━ 5s 12ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 3s 9ms/step - accuracy: 0.6497 - loss: 1.2510 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 7ms/step Classification Report precision recall f1-score support 0 0.74 0.62 0.68 1000 1 0.78 0.75 0.77 1000 2 0.61 0.40 0.48 1000 3 0.41 0.53 0.46 1000 4 0.52 0.69 0.60 1000 5 0.61 0.50 0.55 1000 6 0.69 0.74 0.71 1000 7 0.74 0.66 0.70 1000 8 0.73 0.78 0.76 1000 9 0.71 0.77 0.74 1000 accuracy 0.64 10000 macro avg 0.65 0.64 0.64 10000 weighted avg 0.65 0.64 0.64 10000 Accuracy Score: 0.6448 Root Mean Square Error: 2.4833042503889855
In [ ]:
name = f'CNN_32_MP'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.3734 - loss: 1.7621 - val_accuracy: 0.5194 - val_loss: 1.3883 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.5560 - loss: 1.3003 - val_accuracy: 0.5670 - val_loss: 1.2491 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6047 - loss: 1.1611 - val_accuracy: 0.5704 - val_loss: 1.2069 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.6214 - loss: 1.0908 - val_accuracy: 0.6028 - val_loss: 1.1319 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6504 - loss: 1.0274 - val_accuracy: 0.5938 - val_loss: 1.1347 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 3ms/step - accuracy: 0.6643 - loss: 0.9813 - val_accuracy: 0.6216 - val_loss: 1.0976 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.6765 - loss: 0.9474 - val_accuracy: 0.6282 - val_loss: 1.0699 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 3ms/step - accuracy: 0.6898 - loss: 0.9125 - val_accuracy: 0.6302 - val_loss: 1.0671 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.6940 - loss: 0.8941 - val_accuracy: 0.6204 - val_loss: 1.0860 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7010 - loss: 0.8727 - val_accuracy: 0.6412 - val_loss: 1.0381 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7095 - loss: 0.8442 - val_accuracy: 0.6452 - val_loss: 1.0286 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.7137 - loss: 0.8460 - val_accuracy: 0.6416 - val_loss: 1.0396 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 2s 3ms/step - accuracy: 0.7244 - loss: 0.8114 - val_accuracy: 0.6450 - val_loss: 1.0411 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.6515 - loss: 1.0293 313/313 ━━━━━━━━━━━━━━━━━━━━ 0s 1ms/step Classification Report precision recall f1-score support 0 0.57 0.77 0.65 1000 1 0.80 0.74 0.77 1000 2 0.50 0.52 0.51 1000 3 0.48 0.47 0.47 1000 4 0.61 0.56 0.58 1000 5 0.53 0.61 0.57 1000 6 0.80 0.64 0.71 1000 7 0.79 0.66 0.72 1000 8 0.76 0.74 0.75 1000 9 0.72 0.75 0.73 1000 accuracy 0.65 10000 macro avg 0.66 0.65 0.65 10000 weighted avg 0.66 0.65 0.65 10000 Accuracy Score: 0.6452 Root Mean Square Error: 2.5622646233361612
In [ ]:
name = f'CNN_32_MP_256'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.3902 - loss: 1.6884 - val_accuracy: 0.5372 - val_loss: 1.3323 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.6064 - loss: 1.1329 - val_accuracy: 0.6274 - val_loss: 1.0373 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6714 - loss: 0.9459 - val_accuracy: 0.6440 - val_loss: 1.0170 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.7146 - loss: 0.8347 - val_accuracy: 0.6716 - val_loss: 0.9347 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7454 - loss: 0.7457 - val_accuracy: 0.6974 - val_loss: 0.8848 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 8ms/step - accuracy: 0.7731 - loss: 0.6561 - val_accuracy: 0.6948 - val_loss: 0.9013 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.7996 - loss: 0.5834 - val_accuracy: 0.6578 - val_loss: 1.0386 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.6615 - loss: 1.0447 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.78 0.59 0.67 1000 1 0.86 0.73 0.79 1000 2 0.72 0.36 0.48 1000 3 0.47 0.46 0.46 1000 4 0.50 0.77 0.60 1000 5 0.55 0.60 0.58 1000 6 0.67 0.82 0.74 1000 7 0.72 0.76 0.74 1000 8 0.86 0.69 0.77 1000 9 0.69 0.83 0.75 1000 accuracy 0.66 10000 macro avg 0.68 0.66 0.66 10000 weighted avg 0.68 0.66 0.66 10000 Accuracy Score: 0.661 Root Mean Square Error: 2.4072390824344807
In [ ]:
CNN_data_df = pd.DataFrame(CNN_data)
CNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.536 | 0.471 | 0.477 | 1.328 | 1.510 | 1.512 | 29.283 |
| 1 | CNN_8_nodes | 0.666 | 0.552 | 0.553 | 0.970 | 1.295 | 1.296 | 48.320 |
| 2 | CNN_16_nodes | 0.721 | 0.585 | 0.577 | 0.817 | 1.235 | 1.257 | 40.049 |
| 3 | CNN_32_nodes | 0.740 | 0.602 | 0.597 | 0.760 | 1.198 | 1.218 | 32.941 |
| 4 | CNN_64_nodes | 0.789 | 0.619 | 0.614 | 0.630 | 1.159 | 1.193 | 36.042 |
| 5 | CNN_128_nodes | 0.780 | 0.608 | 0.595 | 0.653 | 1.201 | 1.257 | 33.441 |
| 6 | CNN_256_nodes | 0.806 | 0.611 | 0.602 | 0.572 | 1.247 | 1.292 | 61.605 |
| 7 | CNN_512_nodes | 0.775 | 0.600 | 0.598 | 0.659 | 1.266 | 1.291 | 69.849 |
| 8 | CNN_1024_nodes | 0.789 | 0.599 | 0.583 | 0.619 | 1.308 | 1.374 | 120.000 |
| 9 | CNN_32_4_nodes | 0.595 | 0.540 | 0.548 | 1.159 | 1.289 | 1.295 | 50.951 |
| 10 | CNN_32_8_nodes | 0.674 | 0.589 | 0.574 | 0.930 | 1.198 | 1.243 | 78.339 |
| 11 | CNN_32_16_nodes | 0.734 | 0.613 | 0.614 | 0.764 | 1.129 | 1.145 | 44.272 |
| 12 | CNN_32_32_nodes | 0.795 | 0.613 | 0.615 | 0.596 | 1.210 | 1.209 | 37.210 |
| 13 | CNN_32_64_nodes | 0.843 | 0.610 | 0.605 | 0.465 | 1.291 | 1.327 | 44.449 |
| 14 | CNN_32_128_nodes | 0.889 | 0.647 | 0.645 | 0.331 | 1.197 | 1.246 | 55.631 |
| 15 | CNN_32_256_nodes | 0.840 | 0.658 | 0.642 | 0.477 | 1.102 | 1.148 | 55.118 |
| 16 | CNN_32_512_nodes | 0.944 | 0.661 | 0.652 | 0.177 | 1.381 | 1.421 | 113.277 |
| 17 | CNN_32_1024_nodes | 0.888 | 0.651 | 0.645 | 0.336 | 1.229 | 1.270 | 213.050 |
| 18 | CNN_32_MP | 0.721 | 0.645 | 0.645 | 0.814 | 1.041 | 1.047 | 43.365 |
| 19 | CNN_32_MP_256 | 0.796 | 0.658 | 0.661 | 0.593 | 1.039 | 1.049 | 54.637 |
In [ ]:
name = f'CNN_32_DO_256'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 18ms/step - accuracy: 0.3570 - loss: 1.9217 - val_accuracy: 0.5184 - val_loss: 1.3602 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 11ms/step - accuracy: 0.5539 - loss: 1.2637 - val_accuracy: 0.5742 - val_loss: 1.2054 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.6356 - loss: 1.0590 - val_accuracy: 0.6204 - val_loss: 1.0819 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.6864 - loss: 0.9071 - val_accuracy: 0.6114 - val_loss: 1.1057 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 12ms/step - accuracy: 0.7209 - loss: 0.8097 - val_accuracy: 0.6370 - val_loss: 1.0577 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 12ms/step - accuracy: 0.7575 - loss: 0.7080 - val_accuracy: 0.6358 - val_loss: 1.0833 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 12ms/step - accuracy: 0.7974 - loss: 0.5917 - val_accuracy: 0.6360 - val_loss: 1.1152 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.6388 - loss: 1.1361 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.69 0.64 0.66 1000 1 0.73 0.77 0.75 1000 2 0.52 0.47 0.49 1000 3 0.50 0.36 0.42 1000 4 0.59 0.53 0.56 1000 5 0.58 0.52 0.55 1000 6 0.61 0.80 0.70 1000 7 0.66 0.70 0.68 1000 8 0.74 0.75 0.74 1000 9 0.63 0.79 0.70 1000 accuracy 0.63 10000 macro avg 0.63 0.63 0.63 10000 weighted avg 0.63 0.63 0.63 10000 Accuracy Score: 0.6322 Root Mean Square Error: 2.631938449128323
In [ ]:
name = f'CNN_32_BN_256'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.BatchNormalization())
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 16ms/step - accuracy: 0.4527 - loss: 2.0992 - val_accuracy: 0.5832 - val_loss: 1.2242 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 16s 11ms/step - accuracy: 0.7381 - loss: 0.7720 - val_accuracy: 0.5470 - val_loss: 1.5121 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.8699 - loss: 0.3961 - val_accuracy: 0.6006 - val_loss: 1.3750 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 8s 11ms/step - accuracy: 0.9407 - loss: 0.1830 - val_accuracy: 0.6436 - val_loss: 1.6440 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.9639 - loss: 0.1111 - val_accuracy: 0.6042 - val_loss: 1.7404 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 11ms/step - accuracy: 0.9614 - loss: 0.1202 - val_accuracy: 0.5972 - val_loss: 2.3747 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.6061 - loss: 2.5419 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.70 0.50 0.58 1000 1 0.81 0.67 0.73 1000 2 0.46 0.50 0.48 1000 3 0.40 0.44 0.42 1000 4 0.64 0.42 0.50 1000 5 0.43 0.66 0.52 1000 6 0.78 0.60 0.68 1000 7 0.73 0.62 0.67 1000 8 0.66 0.80 0.72 1000 9 0.63 0.77 0.69 1000 accuracy 0.60 10000 macro avg 0.62 0.60 0.60 10000 weighted avg 0.62 0.60 0.60 10000 Accuracy Score: 0.5994 Root Mean Square Error: 2.702794849780501
In [ ]:
CNN_data_df = pd.DataFrame(CNN_data)
CNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.536 | 0.471 | 0.477 | 1.328 | 1.510 | 1.512 | 29.283 |
| 1 | CNN_8_nodes | 0.666 | 0.552 | 0.553 | 0.970 | 1.295 | 1.296 | 48.320 |
| 2 | CNN_16_nodes | 0.721 | 0.585 | 0.577 | 0.817 | 1.235 | 1.257 | 40.049 |
| 3 | CNN_32_nodes | 0.740 | 0.602 | 0.597 | 0.760 | 1.198 | 1.218 | 32.941 |
| 4 | CNN_64_nodes | 0.789 | 0.619 | 0.614 | 0.630 | 1.159 | 1.193 | 36.042 |
| 5 | CNN_128_nodes | 0.780 | 0.608 | 0.595 | 0.653 | 1.201 | 1.257 | 33.441 |
| 6 | CNN_256_nodes | 0.806 | 0.611 | 0.602 | 0.572 | 1.247 | 1.292 | 61.605 |
| 7 | CNN_512_nodes | 0.775 | 0.600 | 0.598 | 0.659 | 1.266 | 1.291 | 69.849 |
| 8 | CNN_1024_nodes | 0.789 | 0.599 | 0.583 | 0.619 | 1.308 | 1.374 | 120.000 |
| 9 | CNN_32_4_nodes | 0.595 | 0.540 | 0.548 | 1.159 | 1.289 | 1.295 | 50.951 |
| 10 | CNN_32_8_nodes | 0.674 | 0.589 | 0.574 | 0.930 | 1.198 | 1.243 | 78.339 |
| 11 | CNN_32_16_nodes | 0.734 | 0.613 | 0.614 | 0.764 | 1.129 | 1.145 | 44.272 |
| 12 | CNN_32_32_nodes | 0.795 | 0.613 | 0.615 | 0.596 | 1.210 | 1.209 | 37.210 |
| 13 | CNN_32_64_nodes | 0.843 | 0.610 | 0.605 | 0.465 | 1.291 | 1.327 | 44.449 |
| 14 | CNN_32_128_nodes | 0.889 | 0.647 | 0.645 | 0.331 | 1.197 | 1.246 | 55.631 |
| 15 | CNN_32_256_nodes | 0.840 | 0.658 | 0.642 | 0.477 | 1.102 | 1.148 | 55.118 |
| 16 | CNN_32_512_nodes | 0.944 | 0.661 | 0.652 | 0.177 | 1.381 | 1.421 | 113.277 |
| 17 | CNN_32_1024_nodes | 0.888 | 0.651 | 0.645 | 0.336 | 1.229 | 1.270 | 213.050 |
| 18 | CNN_32_MP | 0.721 | 0.645 | 0.645 | 0.814 | 1.041 | 1.047 | 43.365 |
| 19 | CNN_32_MP_256 | 0.796 | 0.658 | 0.661 | 0.593 | 1.039 | 1.049 | 54.637 |
| 20 | CNN_32_DO_256 | 0.783 | 0.636 | 0.632 | 0.631 | 1.115 | 1.149 | 76.352 |
| 21 | CNN_32_BN_256 | 0.952 | 0.597 | 0.599 | 0.148 | 2.375 | 2.532 | 71.470 |
In [ ]:
name = f'CNN_32_MP_DO_256_MP'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
#model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 10ms/step - accuracy: 0.3798 - loss: 1.7219 - val_accuracy: 0.5608 - val_loss: 1.2473 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6001 - loss: 1.1571 - val_accuracy: 0.6216 - val_loss: 1.0596 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.6544 - loss: 0.9927 - val_accuracy: 0.6640 - val_loss: 0.9591 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.6913 - loss: 0.9001 - val_accuracy: 0.6874 - val_loss: 0.9078 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.7083 - loss: 0.8408 - val_accuracy: 0.6776 - val_loss: 0.9405 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7390 - loss: 0.7624 - val_accuracy: 0.7040 - val_loss: 0.8484 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7552 - loss: 0.7151 - val_accuracy: 0.7150 - val_loss: 0.8423 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.7647 - loss: 0.6804 - val_accuracy: 0.7190 - val_loss: 0.8187 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.7837 - loss: 0.6341 - val_accuracy: 0.7162 - val_loss: 0.8378 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7966 - loss: 0.5940 - val_accuracy: 0.7244 - val_loss: 0.8107 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.8016 - loss: 0.5682 - val_accuracy: 0.7228 - val_loss: 0.8233 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.8146 - loss: 0.5443 - val_accuracy: 0.7256 - val_loss: 0.8192 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.8185 - loss: 0.5160 - val_accuracy: 0.7128 - val_loss: 0.8686 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.8334 - loss: 0.4780 - val_accuracy: 0.7100 - val_loss: 0.8811 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.7118 - loss: 0.9057 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.79 0.71 0.75 1000 1 0.88 0.79 0.83 1000 2 0.62 0.60 0.61 1000 3 0.43 0.68 0.53 1000 4 0.66 0.67 0.67 1000 5 0.68 0.54 0.60 1000 6 0.76 0.79 0.78 1000 7 0.80 0.74 0.77 1000 8 0.82 0.83 0.82 1000 9 0.85 0.74 0.79 1000 accuracy 0.71 10000 macro avg 0.73 0.71 0.72 10000 weighted avg 0.73 0.71 0.72 10000 Accuracy Score: 0.7094 Root Mean Square Error: 2.154506904143034
In [ ]:
name = f'CNN_32_MP_DO_256_MP_DO'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.3676 - loss: 1.7456 - val_accuracy: 0.5672 - val_loss: 1.2196 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5783 - loss: 1.2081 - val_accuracy: 0.6342 - val_loss: 1.0359 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6366 - loss: 1.0514 - val_accuracy: 0.6400 - val_loss: 1.0080 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6643 - loss: 0.9747 - val_accuracy: 0.6674 - val_loss: 0.9482 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.6821 - loss: 0.9208 - val_accuracy: 0.6718 - val_loss: 0.9189 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.6931 - loss: 0.8792 - val_accuracy: 0.6974 - val_loss: 0.8750 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7137 - loss: 0.8377 - val_accuracy: 0.6842 - val_loss: 0.9065 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7247 - loss: 0.8051 - val_accuracy: 0.7022 - val_loss: 0.8464 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7359 - loss: 0.7709 - val_accuracy: 0.6990 - val_loss: 0.8437 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.7459 - loss: 0.7409 - val_accuracy: 0.7138 - val_loss: 0.8225 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7484 - loss: 0.7269 - val_accuracy: 0.7202 - val_loss: 0.8063 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7543 - loss: 0.7020 - val_accuracy: 0.7314 - val_loss: 0.7781 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.7663 - loss: 0.6750 - val_accuracy: 0.7378 - val_loss: 0.7726 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7706 - loss: 0.6617 - val_accuracy: 0.7284 - val_loss: 0.7793 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.7821 - loss: 0.6391 - val_accuracy: 0.7308 - val_loss: 0.7858 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.7332 - loss: 0.7950 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.78 0.69 0.74 1000 1 0.84 0.85 0.85 1000 2 0.66 0.61 0.64 1000 3 0.57 0.54 0.55 1000 4 0.69 0.68 0.68 1000 5 0.70 0.62 0.66 1000 6 0.81 0.80 0.80 1000 7 0.74 0.81 0.78 1000 8 0.67 0.91 0.77 1000 9 0.84 0.79 0.82 1000 accuracy 0.73 10000 macro avg 0.73 0.73 0.73 10000 weighted avg 0.73 0.73 0.73 10000 Accuracy Score: 0.7304 Root Mean Square Error: 2.2227910383119687
In [ ]:
CNN_data_df = pd.DataFrame(CNN_data)
CNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.536 | 0.471 | 0.477 | 1.328 | 1.510 | 1.512 | 29.283 |
| 1 | CNN_8_nodes | 0.666 | 0.552 | 0.553 | 0.970 | 1.295 | 1.296 | 48.320 |
| 2 | CNN_16_nodes | 0.721 | 0.585 | 0.577 | 0.817 | 1.235 | 1.257 | 40.049 |
| 3 | CNN_32_nodes | 0.740 | 0.602 | 0.597 | 0.760 | 1.198 | 1.218 | 32.941 |
| 4 | CNN_64_nodes | 0.789 | 0.619 | 0.614 | 0.630 | 1.159 | 1.193 | 36.042 |
| 5 | CNN_128_nodes | 0.780 | 0.608 | 0.595 | 0.653 | 1.201 | 1.257 | 33.441 |
| 6 | CNN_256_nodes | 0.806 | 0.611 | 0.602 | 0.572 | 1.247 | 1.292 | 61.605 |
| 7 | CNN_512_nodes | 0.775 | 0.600 | 0.598 | 0.659 | 1.266 | 1.291 | 69.849 |
| 8 | CNN_1024_nodes | 0.789 | 0.599 | 0.583 | 0.619 | 1.308 | 1.374 | 120.000 |
| 9 | CNN_32_4_nodes | 0.595 | 0.540 | 0.548 | 1.159 | 1.289 | 1.295 | 50.951 |
| 10 | CNN_32_8_nodes | 0.674 | 0.589 | 0.574 | 0.930 | 1.198 | 1.243 | 78.339 |
| 11 | CNN_32_16_nodes | 0.734 | 0.613 | 0.614 | 0.764 | 1.129 | 1.145 | 44.272 |
| 12 | CNN_32_32_nodes | 0.795 | 0.613 | 0.615 | 0.596 | 1.210 | 1.209 | 37.210 |
| 13 | CNN_32_64_nodes | 0.843 | 0.610 | 0.605 | 0.465 | 1.291 | 1.327 | 44.449 |
| 14 | CNN_32_128_nodes | 0.889 | 0.647 | 0.645 | 0.331 | 1.197 | 1.246 | 55.631 |
| 15 | CNN_32_256_nodes | 0.840 | 0.658 | 0.642 | 0.477 | 1.102 | 1.148 | 55.118 |
| 16 | CNN_32_512_nodes | 0.944 | 0.661 | 0.652 | 0.177 | 1.381 | 1.421 | 113.277 |
| 17 | CNN_32_1024_nodes | 0.888 | 0.651 | 0.645 | 0.336 | 1.229 | 1.270 | 213.050 |
| 18 | CNN_32_MP | 0.721 | 0.645 | 0.645 | 0.814 | 1.041 | 1.047 | 43.365 |
| 19 | CNN_32_MP_256 | 0.796 | 0.658 | 0.661 | 0.593 | 1.039 | 1.049 | 54.637 |
| 20 | CNN_32_DO_256 | 0.783 | 0.636 | 0.632 | 0.631 | 1.115 | 1.149 | 76.352 |
| 21 | CNN_32_BN_256 | 0.952 | 0.597 | 0.599 | 0.148 | 2.375 | 2.532 | 71.470 |
| 22 | CNN_32_MP_DO_256_MP | 0.827 | 0.710 | 0.709 | 0.494 | 0.881 | 0.906 | 74.818 |
| 23 | CNN_32_MP_DO_256_MP_DO | 0.775 | 0.731 | 0.730 | 0.656 | 0.786 | 0.792 | 71.424 |
In [ ]:
CNN_filters = [4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384]
for filter in CNN_filters:
name = f'CNN_32_MP_DO_256_MP_DO_{filter}_MP_DO'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Conv2D(filters=filter, kernel_size=(3, 3), strides=(1, 1), activation=tf.nn.relu))
model.add(layers.MaxPool2D((2, 2),strides=2))
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(CNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 11ms/step - accuracy: 0.1005 - loss: 2.3026 - val_accuracy: 0.1006 - val_loss: 2.3027 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.0979 - loss: 2.3027 - val_accuracy: 0.0952 - val_loss: 2.3027 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.0961 - loss: 2.3027 - val_accuracy: 0.0972 - val_loss: 2.3028 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.0987 - loss: 2.3026 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.00 0.00 0.00 1000 1 0.00 0.00 0.00 1000 2 0.00 0.00 0.00 1000 3 0.00 0.00 0.00 1000 4 0.10 1.00 0.18 1000 5 0.00 0.00 0.00 1000 6 0.00 0.00 0.00 1000 7 0.00 0.00 0.00 1000 8 0.00 0.00 0.00 1000 9 0.00 0.00 0.00 1000 accuracy 0.10 10000 macro avg 0.01 0.10 0.02 10000 weighted avg 0.01 0.10 0.02 10000 Accuracy Score: 0.1 Root Mean Square Error: 2.9154759474226504
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 12ms/step - accuracy: 0.1021 - loss: 2.3031 - val_accuracy: 0.0972 - val_loss: 2.3026 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 6ms/step - accuracy: 0.1024 - loss: 2.3027 - val_accuracy: 0.0972 - val_loss: 2.3027 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.0960 - loss: 2.3027 - val_accuracy: 0.0970 - val_loss: 2.3028 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.1036 - loss: 2.3026 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.00 0.00 0.00 1000 1 0.00 0.00 0.00 1000 2 0.00 0.00 0.00 1000 3 0.00 0.00 0.00 1000 4 0.00 0.00 0.00 1000 5 0.00 0.00 0.00 1000 6 0.10 1.00 0.18 1000 7 0.00 0.00 0.00 1000 8 0.00 0.00 0.00 1000 9 0.00 0.00 0.00 1000 accuracy 0.10 10000 macro avg 0.01 0.10 0.02 10000 weighted avg 0.01 0.10 0.02 10000 Accuracy Score: 0.1 Root Mean Square Error: 3.24037034920393
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
/usr/local/lib/python3.11/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 11ms/step - accuracy: 0.2088 - loss: 2.0878 - val_accuracy: 0.4082 - val_loss: 1.6233 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.3747 - loss: 1.6809 - val_accuracy: 0.4670 - val_loss: 1.4753 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.4224 - loss: 1.5727 - val_accuracy: 0.4834 - val_loss: 1.4442 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4477 - loss: 1.5040 - val_accuracy: 0.5326 - val_loss: 1.3258 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4784 - loss: 1.4363 - val_accuracy: 0.5518 - val_loss: 1.2708 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.4871 - loss: 1.4054 - val_accuracy: 0.5532 - val_loss: 1.2426 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.4975 - loss: 1.3777 - val_accuracy: 0.5704 - val_loss: 1.2120 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5162 - loss: 1.3389 - val_accuracy: 0.5888 - val_loss: 1.1623 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5189 - loss: 1.3285 - val_accuracy: 0.5862 - val_loss: 1.1828 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5239 - loss: 1.3117 - val_accuracy: 0.5976 - val_loss: 1.1387 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5370 - loss: 1.2930 - val_accuracy: 0.6108 - val_loss: 1.1250 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5455 - loss: 1.2656 - val_accuracy: 0.5950 - val_loss: 1.1681 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.5501 - loss: 1.2594 - val_accuracy: 0.6044 - val_loss: 1.1154 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.5931 - loss: 1.1450 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.72 0.59 0.65 1000 1 0.74 0.82 0.78 1000 2 0.44 0.43 0.44 1000 3 0.39 0.33 0.36 1000 4 0.47 0.46 0.46 1000 5 0.62 0.38 0.47 1000 6 0.48 0.90 0.62 1000 7 0.75 0.62 0.68 1000 8 0.68 0.83 0.75 1000 9 0.83 0.62 0.71 1000 accuracy 0.60 10000 macro avg 0.61 0.60 0.59 10000 weighted avg 0.61 0.60 0.59 10000 Accuracy Score: 0.5972 Root Mean Square Error: 2.5837182508934675 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 12ms/step - accuracy: 0.2463 - loss: 1.9972 - val_accuracy: 0.4440 - val_loss: 1.5436 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4356 - loss: 1.5285 - val_accuracy: 0.5238 - val_loss: 1.2980 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.4958 - loss: 1.3861 - val_accuracy: 0.5738 - val_loss: 1.1807 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5322 - loss: 1.3009 - val_accuracy: 0.5982 - val_loss: 1.1646 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.5529 - loss: 1.2454 - val_accuracy: 0.6124 - val_loss: 1.0952 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5709 - loss: 1.2097 - val_accuracy: 0.6486 - val_loss: 1.0049 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5929 - loss: 1.1500 - val_accuracy: 0.6554 - val_loss: 0.9872 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.5990 - loss: 1.1279 - val_accuracy: 0.6624 - val_loss: 0.9726 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6090 - loss: 1.1007 - val_accuracy: 0.6624 - val_loss: 0.9820 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6197 - loss: 1.0769 - val_accuracy: 0.6632 - val_loss: 0.9541 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6273 - loss: 1.0599 - val_accuracy: 0.6862 - val_loss: 0.9167 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6376 - loss: 1.0261 - val_accuracy: 0.6768 - val_loss: 0.9143 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6404 - loss: 1.0187 - val_accuracy: 0.6882 - val_loss: 0.9102 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6427 - loss: 1.0061 - val_accuracy: 0.7054 - val_loss: 0.8598 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6502 - loss: 0.9872 - val_accuracy: 0.6982 - val_loss: 0.8688 Epoch 16/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6573 - loss: 0.9732 - val_accuracy: 0.6850 - val_loss: 0.9034 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 4ms/step - accuracy: 0.6942 - loss: 0.9189 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.85 0.60 0.71 1000 1 0.89 0.83 0.86 1000 2 0.65 0.45 0.53 1000 3 0.54 0.43 0.48 1000 4 0.47 0.82 0.60 1000 5 0.57 0.68 0.62 1000 6 0.70 0.80 0.74 1000 7 0.79 0.68 0.73 1000 8 0.83 0.82 0.82 1000 9 0.83 0.80 0.81 1000 accuracy 0.69 10000 macro avg 0.71 0.69 0.69 10000 weighted avg 0.71 0.69 0.69 10000 Accuracy Score: 0.6897 Root Mean Square Error: 2.1200943375236867 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 13ms/step - accuracy: 0.2515 - loss: 1.9882 - val_accuracy: 0.4726 - val_loss: 1.5163 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4364 - loss: 1.5272 - val_accuracy: 0.5236 - val_loss: 1.3151 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.4990 - loss: 1.3821 - val_accuracy: 0.5326 - val_loss: 1.3204 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5315 - loss: 1.3068 - val_accuracy: 0.5972 - val_loss: 1.1342 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5595 - loss: 1.2246 - val_accuracy: 0.6114 - val_loss: 1.0963 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.5874 - loss: 1.1611 - val_accuracy: 0.6478 - val_loss: 1.0007 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6107 - loss: 1.1034 - val_accuracy: 0.6742 - val_loss: 0.9496 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6216 - loss: 1.0685 - val_accuracy: 0.6710 - val_loss: 0.9512 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6378 - loss: 1.0320 - val_accuracy: 0.6816 - val_loss: 0.9247 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6423 - loss: 1.0082 - val_accuracy: 0.6780 - val_loss: 0.9082 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6558 - loss: 0.9785 - val_accuracy: 0.6882 - val_loss: 0.8759 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6588 - loss: 0.9675 - val_accuracy: 0.6940 - val_loss: 0.8640 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6683 - loss: 0.9462 - val_accuracy: 0.7158 - val_loss: 0.8305 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6698 - loss: 0.9351 - val_accuracy: 0.7136 - val_loss: 0.8291 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6793 - loss: 0.9156 - val_accuracy: 0.7096 - val_loss: 0.8200 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.7166 - loss: 0.8297 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.75 0.77 0.76 1000 1 0.86 0.86 0.86 1000 2 0.67 0.48 0.56 1000 3 0.50 0.52 0.51 1000 4 0.59 0.74 0.66 1000 5 0.66 0.56 0.60 1000 6 0.66 0.85 0.75 1000 7 0.81 0.69 0.75 1000 8 0.81 0.85 0.83 1000 9 0.84 0.79 0.81 1000 accuracy 0.71 10000 macro avg 0.72 0.71 0.71 10000 weighted avg 0.72 0.71 0.71 10000 Accuracy Score: 0.7108 Root Mean Square Error: 2.144201483070096 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 14s 13ms/step - accuracy: 0.2833 - loss: 1.9199 - val_accuracy: 0.5162 - val_loss: 1.3477 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 13s 7ms/step - accuracy: 0.5056 - loss: 1.3863 - val_accuracy: 0.5726 - val_loss: 1.1730 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.5602 - loss: 1.2294 - val_accuracy: 0.6178 - val_loss: 1.0849 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 7ms/step - accuracy: 0.5998 - loss: 1.1306 - val_accuracy: 0.6460 - val_loss: 1.0043 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6269 - loss: 1.0616 - val_accuracy: 0.6760 - val_loss: 0.9296 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6489 - loss: 1.0087 - val_accuracy: 0.6794 - val_loss: 0.9121 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6620 - loss: 0.9649 - val_accuracy: 0.7044 - val_loss: 0.8633 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.6709 - loss: 0.9333 - val_accuracy: 0.7012 - val_loss: 0.8564 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6853 - loss: 0.9015 - val_accuracy: 0.7114 - val_loss: 0.8173 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.6923 - loss: 0.8695 - val_accuracy: 0.7252 - val_loss: 0.8123 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7073 - loss: 0.8466 - val_accuracy: 0.7260 - val_loss: 0.7877 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7111 - loss: 0.8288 - val_accuracy: 0.7386 - val_loss: 0.7637 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.7187 - loss: 0.8152 - val_accuracy: 0.7426 - val_loss: 0.7376 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7203 - loss: 0.7959 - val_accuracy: 0.7514 - val_loss: 0.7208 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 6ms/step - accuracy: 0.7286 - loss: 0.7787 - val_accuracy: 0.7470 - val_loss: 0.7390 Epoch 16/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 6ms/step - accuracy: 0.7293 - loss: 0.7693 - val_accuracy: 0.7488 - val_loss: 0.7255 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.7449 - loss: 0.7421 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step Classification Report precision recall f1-score support 0 0.80 0.76 0.78 1000 1 0.94 0.80 0.86 1000 2 0.70 0.62 0.66 1000 3 0.61 0.53 0.57 1000 4 0.62 0.81 0.70 1000 5 0.71 0.61 0.66 1000 6 0.76 0.84 0.80 1000 7 0.84 0.76 0.80 1000 8 0.74 0.90 0.81 1000 9 0.82 0.85 0.84 1000 accuracy 0.75 10000 macro avg 0.75 0.75 0.75 10000 weighted avg 0.75 0.75 0.75 10000 Accuracy Score: 0.7476 Root Mean Square Error: 2.0841305141473265 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 15s 13ms/step - accuracy: 0.3253 - loss: 1.8219 - val_accuracy: 0.5492 - val_loss: 1.2510 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 12s 7ms/step - accuracy: 0.5499 - loss: 1.2608 - val_accuracy: 0.6340 - val_loss: 1.0545 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 8ms/step - accuracy: 0.6184 - loss: 1.0896 - val_accuracy: 0.6722 - val_loss: 0.9526 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.6597 - loss: 0.9809 - val_accuracy: 0.6956 - val_loss: 0.8767 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6779 - loss: 0.9230 - val_accuracy: 0.6956 - val_loss: 0.8610 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.6981 - loss: 0.8641 - val_accuracy: 0.7286 - val_loss: 0.7909 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7197 - loss: 0.8056 - val_accuracy: 0.7356 - val_loss: 0.7570 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 8ms/step - accuracy: 0.7270 - loss: 0.7798 - val_accuracy: 0.7454 - val_loss: 0.7403 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.7404 - loss: 0.7425 - val_accuracy: 0.7630 - val_loss: 0.7043 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.7514 - loss: 0.7232 - val_accuracy: 0.7556 - val_loss: 0.7052 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 8ms/step - accuracy: 0.7553 - loss: 0.6998 - val_accuracy: 0.7666 - val_loss: 0.6768 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7686 - loss: 0.6656 - val_accuracy: 0.7604 - val_loss: 0.6915 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 7ms/step - accuracy: 0.7714 - loss: 0.6534 - val_accuracy: 0.7594 - val_loss: 0.6779 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.7677 - loss: 0.6947 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.85 0.73 0.79 1000 1 0.90 0.87 0.88 1000 2 0.73 0.60 0.66 1000 3 0.63 0.52 0.57 1000 4 0.65 0.79 0.71 1000 5 0.58 0.77 0.66 1000 6 0.87 0.76 0.81 1000 7 0.80 0.81 0.81 1000 8 0.84 0.88 0.86 1000 9 0.83 0.87 0.85 1000 accuracy 0.76 10000 macro avg 0.77 0.76 0.76 10000 weighted avg 0.77 0.76 0.76 10000 Accuracy Score: 0.7607 Root Mean Square Error: 1.9216919628285902 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 24s 22ms/step - accuracy: 0.3403 - loss: 1.7736 - val_accuracy: 0.5040 - val_loss: 1.3439 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 26s 10ms/step - accuracy: 0.5700 - loss: 1.2189 - val_accuracy: 0.6326 - val_loss: 1.0553 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.6350 - loss: 1.0457 - val_accuracy: 0.6848 - val_loss: 0.9107 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 9ms/step - accuracy: 0.6727 - loss: 0.9425 - val_accuracy: 0.7044 - val_loss: 0.8654 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.6963 - loss: 0.8642 - val_accuracy: 0.7158 - val_loss: 0.8299 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.7228 - loss: 0.8035 - val_accuracy: 0.7374 - val_loss: 0.7693 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 9ms/step - accuracy: 0.7370 - loss: 0.7563 - val_accuracy: 0.7404 - val_loss: 0.7443 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.7520 - loss: 0.7101 - val_accuracy: 0.7412 - val_loss: 0.7472 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.7668 - loss: 0.6786 - val_accuracy: 0.7540 - val_loss: 0.7210 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.7755 - loss: 0.6409 - val_accuracy: 0.7640 - val_loss: 0.6957 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.7846 - loss: 0.6148 - val_accuracy: 0.7720 - val_loss: 0.6774 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 9ms/step - accuracy: 0.7950 - loss: 0.5804 - val_accuracy: 0.7766 - val_loss: 0.6775 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.7992 - loss: 0.5682 - val_accuracy: 0.7768 - val_loss: 0.6516 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.8081 - loss: 0.5490 - val_accuracy: 0.7768 - val_loss: 0.6541 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 9ms/step - accuracy: 0.8160 - loss: 0.5241 - val_accuracy: 0.7644 - val_loss: 0.7077 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 4ms/step - accuracy: 0.7643 - loss: 0.7228 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.83 0.78 0.81 1000 1 0.92 0.83 0.87 1000 2 0.76 0.55 0.64 1000 3 0.56 0.62 0.59 1000 4 0.62 0.84 0.72 1000 5 0.72 0.65 0.68 1000 6 0.76 0.88 0.82 1000 7 0.77 0.81 0.79 1000 8 0.90 0.83 0.87 1000 9 0.88 0.80 0.84 1000 accuracy 0.76 10000 macro avg 0.77 0.76 0.76 10000 weighted avg 0.77 0.76 0.76 10000 Accuracy Score: 0.7607 Root Mean Square Error: 1.9230444612644815 Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 20s 19ms/step - accuracy: 0.3448 - loss: 1.7797 - val_accuracy: 0.5920 - val_loss: 1.1573 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.5853 - loss: 1.1750 - val_accuracy: 0.6616 - val_loss: 0.9551 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.6548 - loss: 0.9878 - val_accuracy: 0.6736 - val_loss: 0.9303 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.6999 - loss: 0.8635 - val_accuracy: 0.7218 - val_loss: 0.7999 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.7322 - loss: 0.7722 - val_accuracy: 0.7368 - val_loss: 0.7536 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.7431 - loss: 0.7375 - val_accuracy: 0.7596 - val_loss: 0.7000 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.7646 - loss: 0.6732 - val_accuracy: 0.7492 - val_loss: 0.7368 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.7840 - loss: 0.6221 - val_accuracy: 0.7626 - val_loss: 0.6858 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.7967 - loss: 0.5815 - val_accuracy: 0.7684 - val_loss: 0.6635 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.8094 - loss: 0.5437 - val_accuracy: 0.7786 - val_loss: 0.6507 Epoch 11/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.8247 - loss: 0.5019 - val_accuracy: 0.7724 - val_loss: 0.6712 Epoch 12/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 11s 11ms/step - accuracy: 0.8349 - loss: 0.4677 - val_accuracy: 0.7846 - val_loss: 0.6496 Epoch 13/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.8427 - loss: 0.4527 - val_accuracy: 0.7778 - val_loss: 0.6730 Epoch 14/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.8432 - loss: 0.4384 - val_accuracy: 0.7882 - val_loss: 0.6549 Epoch 15/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 10ms/step - accuracy: 0.8545 - loss: 0.4117 - val_accuracy: 0.7630 - val_loss: 0.7135 Epoch 16/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 10s 10ms/step - accuracy: 0.8552 - loss: 0.4018 - val_accuracy: 0.7852 - val_loss: 0.6639 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 2s 5ms/step - accuracy: 0.7670 - loss: 0.7080 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.75 0.83 0.79 1000 1 0.92 0.83 0.87 1000 2 0.63 0.69 0.66 1000 3 0.66 0.59 0.62 1000 4 0.67 0.77 0.72 1000 5 0.74 0.64 0.69 1000 6 0.81 0.82 0.82 1000 7 0.88 0.76 0.82 1000 8 0.78 0.90 0.84 1000 9 0.85 0.84 0.84 1000 accuracy 0.77 10000 macro avg 0.77 0.77 0.77 10000 weighted avg 0.77 0.77 0.77 10000 Accuracy Score: 0.7662 Root Mean Square Error: 2.008233054204616
In [ ]:
CNN_data_df = pd.DataFrame(CNN_data)
CNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.536 | 0.471 | 0.477 | 1.328 | 1.510 | 1.512 | 29.283 |
| 1 | CNN_8_nodes | 0.666 | 0.552 | 0.553 | 0.970 | 1.295 | 1.296 | 48.320 |
| 2 | CNN_16_nodes | 0.721 | 0.585 | 0.577 | 0.817 | 1.235 | 1.257 | 40.049 |
| 3 | CNN_32_nodes | 0.740 | 0.602 | 0.597 | 0.760 | 1.198 | 1.218 | 32.941 |
| 4 | CNN_64_nodes | 0.789 | 0.619 | 0.614 | 0.630 | 1.159 | 1.193 | 36.042 |
| 5 | CNN_128_nodes | 0.780 | 0.608 | 0.595 | 0.653 | 1.201 | 1.257 | 33.441 |
| 6 | CNN_256_nodes | 0.806 | 0.611 | 0.602 | 0.572 | 1.247 | 1.292 | 61.605 |
| 7 | CNN_512_nodes | 0.775 | 0.600 | 0.598 | 0.659 | 1.266 | 1.291 | 69.849 |
| 8 | CNN_1024_nodes | 0.789 | 0.599 | 0.583 | 0.619 | 1.308 | 1.374 | 120.000 |
| 9 | CNN_32_4_nodes | 0.595 | 0.540 | 0.548 | 1.159 | 1.289 | 1.295 | 50.951 |
| 10 | CNN_32_8_nodes | 0.674 | 0.589 | 0.574 | 0.930 | 1.198 | 1.243 | 78.339 |
| 11 | CNN_32_16_nodes | 0.734 | 0.613 | 0.614 | 0.764 | 1.129 | 1.145 | 44.272 |
| 12 | CNN_32_32_nodes | 0.795 | 0.613 | 0.615 | 0.596 | 1.210 | 1.209 | 37.210 |
| 13 | CNN_32_64_nodes | 0.843 | 0.610 | 0.605 | 0.465 | 1.291 | 1.327 | 44.449 |
| 14 | CNN_32_128_nodes | 0.889 | 0.647 | 0.645 | 0.331 | 1.197 | 1.246 | 55.631 |
| 15 | CNN_32_256_nodes | 0.840 | 0.658 | 0.642 | 0.477 | 1.102 | 1.148 | 55.118 |
| 16 | CNN_32_512_nodes | 0.944 | 0.661 | 0.652 | 0.177 | 1.381 | 1.421 | 113.277 |
| 17 | CNN_32_1024_nodes | 0.888 | 0.651 | 0.645 | 0.336 | 1.229 | 1.270 | 213.050 |
| 18 | CNN_32_MP | 0.721 | 0.645 | 0.645 | 0.814 | 1.041 | 1.047 | 43.365 |
| 19 | CNN_32_MP_256 | 0.796 | 0.658 | 0.661 | 0.593 | 1.039 | 1.049 | 54.637 |
| 20 | CNN_32_DO_256 | 0.783 | 0.636 | 0.632 | 0.631 | 1.115 | 1.149 | 76.352 |
| 21 | CNN_32_BN_256 | 0.952 | 0.597 | 0.599 | 0.148 | 2.375 | 2.532 | 71.470 |
| 22 | CNN_32_MP_DO_256_MP | 0.827 | 0.710 | 0.709 | 0.494 | 0.881 | 0.906 | 74.818 |
| 23 | CNN_32_MP_DO_256_MP_DO | 0.775 | 0.731 | 0.730 | 0.656 | 0.786 | 0.792 | 71.424 |
| 24 | CNN_32_MP_DO_256_MP_DO_4_MP_DO | 0.097 | 0.097 | 0.100 | 2.303 | 2.303 | 2.303 | 23.527 |
| 25 | CNN_32_MP_DO_256_MP_DO_8_MP_DO | 0.098 | 0.097 | 0.100 | 2.303 | 2.303 | 2.303 | 33.550 |
| 26 | CNN_32_MP_DO_256_MP_DO_16_MP_DO | 0.548 | 0.604 | 0.597 | 1.263 | 1.115 | 1.146 | 71.328 |
| 27 | CNN_32_MP_DO_256_MP_DO_32_MP_DO | 0.656 | 0.685 | 0.690 | 0.975 | 0.903 | 0.920 | 85.087 |
| 28 | CNN_32_MP_DO_256_MP_DO_64_MP_DO | 0.679 | 0.710 | 0.711 | 0.914 | 0.820 | 0.834 | 79.452 |
| 29 | CNN_32_MP_DO_256_MP_DO_128_MP_DO | 0.729 | 0.749 | 0.748 | 0.771 | 0.725 | 0.741 | 97.778 |
| 30 | CNN_32_MP_DO_256_MP_DO_256_MP_DO | 0.768 | 0.759 | 0.761 | 0.663 | 0.678 | 0.698 | 107.138 |
| 31 | CNN_32_MP_DO_256_MP_DO_512_MP_DO | 0.810 | 0.764 | 0.761 | 0.537 | 0.708 | 0.731 | 168.257 |
| 32 | CNN_32_MP_DO_256_MP_DO_1024_MP_DO | 0.852 | 0.785 | 0.766 | 0.413 | 0.664 | 0.708 | 151.381 |
In [ ]:
name = f'DNN_64_32_nodes_BN'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Dense(units=64, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.BatchNormalization())
model.add(layers.Dense(units=32, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(DNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 8ms/step - accuracy: 0.3912 - loss: 1.9827 - val_accuracy: 0.4554 - val_loss: 1.5867 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.4852 - loss: 1.5040 - val_accuracy: 0.4504 - val_loss: 1.6584 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 6ms/step - accuracy: 0.5177 - loss: 1.4272 - val_accuracy: 0.4654 - val_loss: 1.5463 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 4ms/step - accuracy: 0.5384 - loss: 1.3630 - val_accuracy: 0.4736 - val_loss: 1.5684 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 4ms/step - accuracy: 0.5675 - loss: 1.2862 - val_accuracy: 0.4564 - val_loss: 1.6592 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5884 - loss: 1.2153 - val_accuracy: 0.4728 - val_loss: 1.5731 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4697 - loss: 1.5600 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.52 0.51 0.51 1000 1 0.56 0.63 0.59 1000 2 0.38 0.22 0.28 1000 3 0.31 0.32 0.31 1000 4 0.37 0.47 0.42 1000 5 0.36 0.46 0.40 1000 6 0.48 0.51 0.49 1000 7 0.60 0.49 0.54 1000 8 0.64 0.54 0.58 1000 9 0.55 0.59 0.57 1000 accuracy 0.47 10000 macro avg 0.48 0.47 0.47 10000 weighted avg 0.48 0.47 0.47 10000 Accuracy Score: 0.4724 Root Mean Square Error: 3.1195031655697996
In [ ]:
name = f'DNN_64_32_nodes_DO'
k.clear_session()
model = models.Sequential()
model.add(layers.Input(shape=(32,32,3,)))
model.add(layers.Dense(units=64, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(units=32, activation=tf.nn.relu, kernel_regularizer=tf.keras.regularizers.L2(0.001)))
model.add(layers.Flatten())
model.add(layers.Dense(units=10, activation=tf.nn.softmax))
keras.utils.plot_model(model, f"CIFAR10_{name}.png", show_shapes=True)
model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
time_start = time.time()
history = model.fit(image_train_norm, label_train_split, epochs=200, batch_size=64, validation_data=(image_val_norm, label_val_split), callbacks=[tf.keras.callbacks.ModelCheckpoint(f"{name}_model.keras",save_best_only=True,save_weights_only=False)
,tf.keras.callbacks.EarlyStopping(monitor='val_accuracy', patience=2)])
time_end = time.time()
preds = model.predict(image_test_norm)
test_pred = model.evaluate(image_test_norm, test_labels)
history_dict = history.history
history_df=pd.DataFrame(history_dict)
plt.subplots(figsize=(16,12))
plt.tight_layout()
display_training_curves(history_df['accuracy'], history_df['val_accuracy'], 'accuracy', 211)
display_training_curves(history_df['loss'], history_df['val_loss'], 'loss', 212)
pred= model.predict(image_test_norm)
pred=np.argmax(pred, axis=1)
print_validation_report(test_labels, pred)
plot_confusion_matrix(test_labels, pred)
add_to_data(DNN_data, name, history, test_pred)
Epoch 1/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 9s 7ms/step - accuracy: 0.3483 - loss: 1.8689 - val_accuracy: 0.4480 - val_loss: 1.5961 Epoch 2/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 7s 6ms/step - accuracy: 0.4717 - loss: 1.5392 - val_accuracy: 0.4714 - val_loss: 1.5363 Epoch 3/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.4932 - loss: 1.4786 - val_accuracy: 0.4750 - val_loss: 1.5178 Epoch 4/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.5074 - loss: 1.4351 - val_accuracy: 0.4784 - val_loss: 1.5061 Epoch 5/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 6s 5ms/step - accuracy: 0.5171 - loss: 1.4151 - val_accuracy: 0.4812 - val_loss: 1.4928 Epoch 6/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.5319 - loss: 1.3738 - val_accuracy: 0.4834 - val_loss: 1.4948 Epoch 7/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.5408 - loss: 1.3529 - val_accuracy: 0.4928 - val_loss: 1.4867 Epoch 8/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 4s 5ms/step - accuracy: 0.5450 - loss: 1.3371 - val_accuracy: 0.4968 - val_loss: 1.4784 Epoch 9/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 5s 5ms/step - accuracy: 0.5580 - loss: 1.3157 - val_accuracy: 0.4878 - val_loss: 1.5010 Epoch 10/200 704/704 ━━━━━━━━━━━━━━━━━━━━ 3s 5ms/step - accuracy: 0.5604 - loss: 1.2960 - val_accuracy: 0.4914 - val_loss: 1.4849 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 3ms/step - accuracy: 0.4948 - loss: 1.4679 313/313 ━━━━━━━━━━━━━━━━━━━━ 1s 2ms/step Classification Report precision recall f1-score support 0 0.57 0.53 0.55 1000 1 0.59 0.63 0.61 1000 2 0.36 0.41 0.38 1000 3 0.41 0.22 0.29 1000 4 0.44 0.38 0.41 1000 5 0.38 0.49 0.43 1000 6 0.52 0.53 0.52 1000 7 0.52 0.57 0.54 1000 8 0.61 0.65 0.63 1000 9 0.58 0.55 0.57 1000 accuracy 0.50 10000 macro avg 0.50 0.50 0.49 10000 weighted avg 0.50 0.50 0.49 10000 Accuracy Score: 0.4969 Root Mean Square Error: 3.0929435817680218
In [ ]:
DNN_data_df = pd.DataFrame(DNN_data)
DNN_data_df
Out[ ]:
| model | accuracy | val_accuracy | test_accuracy | loss | val_loss | test_loss | time | |
|---|---|---|---|---|---|---|---|---|
| 0 | DNN | 0.453 | 0.415 | 0.417 | 1.597 | 1.687 | 1.670 | 30.760 |
| 1 | DNN_8_nodes | 0.484 | 0.448 | 0.455 | 1.491 | 1.582 | 1.554 | 28.051 |
| 2 | DNN_16_nodes | 0.499 | 0.458 | 0.473 | 1.440 | 1.543 | 1.502 | 38.472 |
| 3 | DNN_32_nodes | 0.496 | 0.467 | 0.476 | 1.457 | 1.527 | 1.489 | 19.331 |
| 4 | DNN_64_nodes | 0.543 | 0.485 | 0.481 | 1.329 | 1.500 | 1.480 | 32.487 |
| 5 | DNN_128_nodes | 0.547 | 0.475 | 0.475 | 1.319 | 1.512 | 1.507 | 36.486 |
| 6 | DNN_256_nodes | 0.579 | 0.489 | 0.484 | 1.228 | 1.509 | 1.514 | 65.084 |
| 7 | DNN_512_nodes | 0.577 | 0.488 | 0.482 | 1.236 | 1.532 | 1.537 | 90.682 |
| 8 | DNN_1024_nodes | 0.580 | 0.488 | 0.478 | 1.223 | 1.537 | 1.536 | 187.932 |
| 9 | DNN_64_4_nodes | 0.464 | 0.424 | 0.444 | 1.566 | 1.651 | 1.605 | 27.527 |
| 10 | DNN_64_8_nodes | 0.497 | 0.459 | 0.471 | 1.462 | 1.554 | 1.523 | 43.371 |
| 11 | DNN_64_16_nodes | 0.518 | 0.473 | 0.489 | 1.410 | 1.511 | 1.479 | 37.811 |
| 12 | DNN_64_32_nodes | 0.530 | 0.480 | 0.492 | 1.383 | 1.517 | 1.486 | 29.874 |
| 13 | DNN_64_64_nodes | 0.580 | 0.484 | 0.488 | 1.256 | 1.533 | 1.514 | 54.106 |
| 14 | DNN_64_128_nodes | 0.557 | 0.486 | 0.489 | 1.311 | 1.513 | 1.503 | 44.237 |
| 15 | DNN_64_256_nodes | 0.563 | 0.492 | 0.500 | 1.294 | 1.498 | 1.477 | 61.046 |
| 16 | DNN_64_512_nodes | 0.571 | 0.488 | 0.490 | 1.274 | 1.532 | 1.511 | 95.996 |
| 17 | DNN_64_1024_nodes | 0.566 | 0.484 | 0.485 | 1.285 | 1.511 | 1.499 | 168.276 |
| 18 | DNN_64_32_nodes_BN | 0.583 | 0.473 | 0.472 | 1.239 | 1.573 | 1.556 | 33.651 |
| 19 | DNN_64_32_nodes_DO | 0.556 | 0.491 | 0.497 | 1.307 | 1.485 | 1.469 | 50.149 |
In [ ]:
print('hello world')
time.sleep(600)
print('hello world')
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: